📄 queryparse.c
字号:
// Copyright (c) 1999-2001 David Muse// See the file COPYING for more information#include <config.h>#include <sqlrconnection.h>bool sqlrcursor_svr::queryIsNotSelect() { // scan the query, bypassing whitespace and comments. char *ptr=skipWhitespaceAndComments(querybuffer); // if the query is a select but not a select into then return false, // otherwise return true if (!charstring::compareIgnoringCase(ptr,"select",6) && charstring::compareIgnoringCase(ptr,"select into ",12)) { return false; } return true;}bool sqlrcursor_svr::queryIsCommitOrRollback() { // scan the query, bypassing whitespace and comments. char *ptr=skipWhitespaceAndComments(querybuffer); // if the query is a commit or rollback, return true // otherwise return false return (!charstring::compareIgnoringCase(ptr,"commit",6) || !charstring::compareIgnoringCase(ptr,"rollback",8));}char *sqlrcursor_svr::skipWhitespaceAndComments(const char *querybuffer) { // scan the query, bypassing whitespace and comments. char *ptr=(char *)querybuffer; while (*ptr && (*ptr==' ' || *ptr=='\n' || *ptr==' ' || *ptr=='-')) { // skip any comments if (*ptr=='-') { while (*ptr && *ptr!='\n') { ptr++; } } ptr++; } return ptr;}void sqlrcursor_svr::checkForTempTable(const char *query, uint32_t length) { char *ptr=(char *)query; char *endptr=(char *)query+length; // skip any leading comments if (!skipWhitespace(&ptr,endptr) || !skipComment(&ptr,endptr) || !skipWhitespace(&ptr,endptr)) { return; } // see if the query matches the pattern for a temporary query that // creates a temporary table if (createtemp.match(ptr)) { ptr=createtemp.getSubstringEnd(0); } else { return; } // get the table name stringbuffer tablename; while (ptr && *ptr && *ptr!=' ' && *ptr!='\n' && *ptr!=' ' && ptr<endptr) { tablename.append(*ptr); ptr++; } // append to list of temp tables conn->addSessionTempTableForDrop(tablename.getString());}bool sqlrcursor_svr::skipComment(char **ptr, const char *endptr) { while (*ptr<endptr && !charstring::compare(*ptr,"--",2)) { while (**ptr && **ptr!='\n') { (*ptr)++; } } return *ptr!=endptr;}bool sqlrcursor_svr::skipWhitespace(char **ptr, const char *endptr) { while ((**ptr==' ' || **ptr=='\n' || **ptr==' ') && *ptr<endptr) { (*ptr)++; } return *ptr!=endptr;}bool sqlrcursor_svr::advance(char **ptr, const char *endptr, uint16_t steps) { for (uint16_t i=0; i<steps && *ptr<endptr; i++) { (*ptr)++; } return *ptr!=endptr;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -