mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Add the SQLITE_DBCONFIG_ENABLE_COMMENTS setting (default on) to enable or
disable the ability to include comments in SQL input text. FossilOrigin-Name: 393749a2e22d5c8eba36e2106a35909420aa6316652d1ab4f18ef699247b6fba
This commit is contained in:
@ -982,6 +982,7 @@ int sqlite3_db_config(sqlite3 *db, int op, ...){
|
||||
{ SQLITE_DBCONFIG_REVERSE_SCANORDER, SQLITE_ReverseOrder },
|
||||
{ SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE, SQLITE_AttachCreate },
|
||||
{ SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE, SQLITE_AttachWrite },
|
||||
{ SQLITE_DBCONFIG_ENABLE_COMMENTS, SQLITE_Comments },
|
||||
};
|
||||
unsigned int i;
|
||||
rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
|
||||
@ -3325,6 +3326,7 @@ static int openDatabase(
|
||||
| SQLITE_CacheSpill
|
||||
| SQLITE_AttachCreate
|
||||
| SQLITE_AttachWrite
|
||||
| SQLITE_Comments
|
||||
#if !defined(SQLITE_TRUSTED_SCHEMA) || SQLITE_TRUSTED_SCHEMA+0!=0
|
||||
| SQLITE_TrustedSchema
|
||||
#endif
|
||||
|
13
src/parse.y
13
src/parse.y
@ -1882,7 +1882,8 @@ wqlist(A) ::= wqlist(A) COMMA wqitem(X). {
|
||||
// These must be at the end of this file. Specifically, the rules that
|
||||
// introduce tokens WINDOW, OVER and FILTER must appear last. This causes
|
||||
// the integer values assigned to these tokens to be larger than all other
|
||||
// tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL.
|
||||
// tokens that may be output by the tokenizer except TK_SPACE, TK_COMMENT,
|
||||
// and TK_ILLEGAL.
|
||||
//
|
||||
%ifndef SQLITE_OMIT_WINDOWFUNC
|
||||
%type windowdefn_list {Window*}
|
||||
@ -2059,9 +2060,9 @@ term(A) ::= QNUMBER(X). {
|
||||
}
|
||||
|
||||
/*
|
||||
** The TK_SPACE and TK_ILLEGAL tokens must be the last two tokens. The
|
||||
** parser depends on this. Those tokens are not used in any grammar rule.
|
||||
** They are only used by the tokenizer. Declare them last so that they
|
||||
** are guaranteed to be the last two tokens
|
||||
** The TK_SPACE, TK_COMMENT, and TK_ILLEGAL tokens must be the last three
|
||||
** tokens. The parser depends on this. Those tokens are not used in any
|
||||
** grammar rule. They are only used by the tokenizer. Declare them last
|
||||
** so that they are guaranteed to be the last three.
|
||||
*/
|
||||
%token SPACE ILLEGAL.
|
||||
%token SPACE COMMENT ILLEGAL.
|
||||
|
@ -8727,6 +8727,7 @@ static int do_meta_command(char *zLine, ShellState *p){
|
||||
} aDbConfig[] = {
|
||||
{ "attach_create", SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE },
|
||||
{ "attach_write", SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE },
|
||||
{ "comments", SQLITE_DBCONFIG_ENABLE_COMMENTS },
|
||||
{ "defensive", SQLITE_DBCONFIG_DEFENSIVE },
|
||||
{ "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL },
|
||||
{ "dqs_dml", SQLITE_DBCONFIG_DQS_DML },
|
||||
|
@ -2558,6 +2558,19 @@ struct sqlite3_mem_methods {
|
||||
** after processing the first argument.
|
||||
** </dd>
|
||||
**
|
||||
** [[SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE]]
|
||||
** <dt>SQLITE_DBCONFIG_ENABLE_COMMENTS</dt>
|
||||
** <dd>The SQLITE_DBCONFIG_ENABLE_COMMENTS option enables or disables the
|
||||
** ability to include comments in SQL text. Comments are enabled by default,
|
||||
** but can be disabled, using the current DBCONFIG option if desired.
|
||||
** This option takes two arguments which are an integer and a pointer
|
||||
** to an integer. The first argument is 1, 0, or -1 to enable, disable, or
|
||||
** leave unchanged the ability to use comments in SQL text,
|
||||
** respectively. If the second argument is not NULL, then 0 or 1 is written
|
||||
** into the integer that the second argument points to depending on if
|
||||
** comments are allowed in SQL text after processing the first argument.
|
||||
** </dd>
|
||||
**
|
||||
** </dl>
|
||||
*/
|
||||
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
|
||||
@ -2582,7 +2595,8 @@ struct sqlite3_mem_methods {
|
||||
#define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */
|
||||
#define SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE 1020 /* int int* */
|
||||
#define SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE 1021 /* int int* */
|
||||
#define SQLITE_DBCONFIG_MAX 1021 /* Largest DBCONFIG */
|
||||
#define SQLITE_DBCONFIG_ENABLE_COMMENTS 1022 /* int int* */
|
||||
#define SQLITE_DBCONFIG_MAX 1022 /* Largest DBCONFIG */
|
||||
|
||||
/*
|
||||
** CAPI3REF: Enable Or Disable Extended Result Codes
|
||||
|
@ -1836,6 +1836,7 @@ struct sqlite3 {
|
||||
#define SQLITE_FkNoAction HI(0x00008) /* Treat all FK as NO ACTION */
|
||||
#define SQLITE_AttachCreate HI(0x00010) /* ATTACH allowed to create new dbs */
|
||||
#define SQLITE_AttachWrite HI(0x00020) /* ATTACH allowed to open for write */
|
||||
#define SQLITE_Comments HI(0x00040) /* Enable SQL comments */
|
||||
|
||||
/* Flags used only if debugging */
|
||||
#ifdef SQLITE_DEBUG
|
||||
|
@ -288,7 +288,7 @@ int sqlite3GetToken(const unsigned char *z, int *tokenType){
|
||||
case CC_MINUS: {
|
||||
if( z[1]=='-' ){
|
||||
for(i=2; (c=z[i])!=0 && c!='\n'; i++){}
|
||||
*tokenType = TK_SPACE; /* IMP: R-22934-25134 */
|
||||
*tokenType = TK_COMMENT;
|
||||
return i;
|
||||
}else if( z[1]=='>' ){
|
||||
*tokenType = TK_PTR;
|
||||
@ -324,7 +324,7 @@ int sqlite3GetToken(const unsigned char *z, int *tokenType){
|
||||
}
|
||||
for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){}
|
||||
if( c ) i++;
|
||||
*tokenType = TK_SPACE; /* IMP: R-22934-25134 */
|
||||
*tokenType = TK_COMMENT;
|
||||
return i;
|
||||
}
|
||||
case CC_PERCENT: {
|
||||
@ -653,12 +653,12 @@ int sqlite3RunParser(Parse *pParse, const char *zSql){
|
||||
if( tokenType>=TK_WINDOW ){
|
||||
assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER
|
||||
|| tokenType==TK_ILLEGAL || tokenType==TK_WINDOW
|
||||
|| tokenType==TK_QNUMBER
|
||||
|| tokenType==TK_QNUMBER || tokenType==TK_COMMENT
|
||||
);
|
||||
#else
|
||||
if( tokenType>=TK_SPACE ){
|
||||
assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL
|
||||
|| tokenType==TK_QNUMBER
|
||||
|| tokenType==TK_QNUMBER || tokenType==TK_COMMENT
|
||||
);
|
||||
#endif /* SQLITE_OMIT_WINDOWFUNC */
|
||||
if( AtomicLoad(&db->u1.isInterrupted) ){
|
||||
@ -692,6 +692,9 @@ int sqlite3RunParser(Parse *pParse, const char *zSql){
|
||||
assert( n==6 );
|
||||
tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed);
|
||||
#endif /* SQLITE_OMIT_WINDOWFUNC */
|
||||
}else if( tokenType==TK_COMMENT && (db->flags & SQLITE_Comments)!=0 ){
|
||||
zSql += n;
|
||||
continue;
|
||||
}else if( tokenType!=TK_QNUMBER ){
|
||||
Token x;
|
||||
x.z = zSql;
|
||||
|
@ -830,7 +830,9 @@ int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
|
||||
z = (const unsigned char*)zCreateTable;
|
||||
for(i=0; aKeyword[i]; i++){
|
||||
int tokenType = 0;
|
||||
do{ z += sqlite3GetToken(z, &tokenType); }while( tokenType==TK_SPACE );
|
||||
do{
|
||||
z += sqlite3GetToken(z, &tokenType);
|
||||
}while( tokenType==TK_SPACE || tokenType==TK_COMMENT );
|
||||
if( tokenType!=aKeyword[i] ){
|
||||
sqlite3ErrorWithMsg(db, SQLITE_ERROR, "syntax error");
|
||||
return SQLITE_ERROR;
|
||||
|
Reference in New Issue
Block a user