aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.c4
-rw-r--r--src/resolve.c10
-rw-r--r--src/shell.c.in22
-rw-r--r--src/sqlite.h.in30
-rw-r--r--src/sqliteInt.h2
-rw-r--r--src/test1.c22
6 files changed, 69 insertions, 21 deletions
diff --git a/src/main.c b/src/main.c
index 0dd8e294f..0596ce81b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -845,6 +845,9 @@ int sqlite3_db_config(sqlite3 *db, int op, ...){
{ SQLITE_DBCONFIG_DEFENSIVE, SQLITE_Defensive },
{ SQLITE_DBCONFIG_WRITABLE_SCHEMA, SQLITE_WriteSchema|
SQLITE_NoSchemaError },
+ { SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, SQLITE_LegacyAlter },
+ { SQLITE_DBCONFIG_NO_DQS_SCHEMA, SQLITE_NoDQSSchema },
+ { SQLITE_DBCONFIG_NO_DQS, SQLITE_NoDQS },
};
unsigned int i;
rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
@@ -3071,6 +3074,7 @@ static int openDatabase(
db->nextPagesize = 0;
db->nMaxSorterMmap = 0x7FFFFFFF;
db->flags |= SQLITE_ShortColNames | SQLITE_EnableTrigger | SQLITE_CacheSpill
+ | SQLITE_NoDQSSchema
#if !defined(SQLITE_DEFAULT_AUTOMATIC_INDEX) || SQLITE_DEFAULT_AUTOMATIC_INDEX
| SQLITE_AutoIndex
#endif
diff --git a/src/resolve.c b/src/resolve.c
index 658792354..ddb1bcfcb 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -477,7 +477,8 @@ static int lookupName(
if( cnt==0 && zTab==0 ){
assert( pExpr->op==TK_ID );
if( ExprHasProperty(pExpr,EP_DblQuoted)
- && 0==(pTopNC->ncFlags&NC_NoDblQStr)
+ && 0==(pTopNC->ncFlags&NC_NoDblQStr)
+ && 0==(db->flags & SQLITE_NoDQS)
){
/* If a double-quoted identifier does not match any known column name,
** then treat it as a string.
@@ -1771,7 +1772,12 @@ int sqlite3ResolveSelfReference(
sNC.pParse = pParse;
sNC.pSrcList = &sSrc;
sNC.ncFlags = type;
- if( !pParse->db->init.busy && !sqlite3WritableSchema(pParse->db) ){
+ if( (pParse->db->flags & SQLITE_NoDQS)!=0
+ || (!pParse->db->init.busy
+ && !sqlite3WritableSchema(pParse->db)
+ && (pParse->db->flags & SQLITE_NoDQSSchema)!=0
+ )
+ ){
sNC.ncFlags |= NC_NoDblQStr;
}
if( (rc = sqlite3ResolveExprNames(&sNC, pExpr))!=SQLITE_OK ) return rc;
diff --git a/src/shell.c.in b/src/shell.c.in
index 8b0e3a1cc..d72b41947 100644
--- a/src/shell.c.in
+++ b/src/shell.c.in
@@ -7075,15 +7075,19 @@ static int do_meta_command(char *zLine, ShellState *p){
const char *zName;
int op;
} aDbConfig[] = {
- { "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
- { "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
- { "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
- { "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
- { "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
- { "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
- { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
- { "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
- { "defensive", SQLITE_DBCONFIG_DEFENSIVE },
+ { "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
+ { "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
+ { "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
+ { "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
+ { "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
+ { "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
+ { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
+ { "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
+ { "defensive", SQLITE_DBCONFIG_DEFENSIVE },
+ { "wriable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA },
+ { "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE },
+ { "no_dqs_schema", SQLITE_DBCONFIG_NO_DQS_SCHEMA },
+ { "no_dqs", SQLITE_DBCONFIG_NO_DQS },
};
int ii, v;
open_db(p, 0);
diff --git a/src/sqlite.h.in b/src/sqlite.h.in
index f6054c17e..9c6140894 100644
--- a/src/sqlite.h.in
+++ b/src/sqlite.h.in
@@ -2220,6 +2220,31 @@ struct sqlite3_mem_methods {
** integer into which is written 0 or 1 to indicate whether the writable_schema
** is enabled or disabled following this call.
** </dd>
+**
+** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]]
+** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
+** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
+** the legacy behavior of the [ALTER TABLE RENAME] command such it
+** behaves as it did prior to [version 3.24.0] (2018-06-04). See the
+** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for
+** additional information. This feature can also be turned on and off
+** using the [PRAGMA legacy_alter_table] statement.
+** </dd>
+**
+** [[SQLITE_DBCONFIG_NO_DQS_SCHEMA]]
+** <dt>SQLITE_DBCONFIG_NO_DQS_SCHEMA</td>
+** <dd>The SQLITE_DBCONFIG_NO_DQS_SCHEMA option activates or deactivates
+** the legacy [double-quoted string literal] misfeature for DDL statements.
+** </dd>
+**
+** [[SQLITE_DBCONFIG_NO_DQS]]
+** <dt>SQLITE_DBCONFIG_NO_DQS</td>
+** <dd>The SQLITE_DBCONFIG_NO_DQS option activates or deactivates
+** the legacy [double-quoted string literal] misfeature. The
+** double-quoted string literal misfeature is on by default for
+** compatibility, though it might become off by default in some
+** future release of SQLite.
+** </dd>
** </dl>
*/
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
@@ -2234,7 +2259,10 @@ struct sqlite3_mem_methods {
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
-#define SQLITE_DBCONFIG_MAX 1011 /* Largest DBCONFIG */
+#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
+#define SQLITE_DBCONFIG_NO_DQS_SCHEMA 1013 /* int int* */
+#define SQLITE_DBCONFIG_NO_DQS 1014 /* int int* */
+#define SQLITE_DBCONFIG_MAX 1014 /* Largest DBCONFIG */
/*
** CAPI3REF: Enable Or Disable Extended Result Codes
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index 664820bf5..1585fb9e5 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -1548,6 +1548,8 @@ struct sqlite3 {
#define SQLITE_LegacyAlter 0x04000000 /* Legacy ALTER TABLE behaviour */
#define SQLITE_NoSchemaError 0x08000000 /* Do not report schema parse errors*/
#define SQLITE_Defensive 0x10000000 /* Input SQL is likely hostile */
+#define SQLITE_NoDQSSchema 0x20000000 /* No dbl-quote strings in CREATE */
+#define SQLITE_NoDQS 0x40000000 /* No double-quoted strings anywhere*/
/* Flags used only if debugging */
#define HI(X) ((u64)(X)<<32)
diff --git a/src/test1.c b/src/test1.c
index be31ee110..f7b6e25e7 100644
--- a/src/test1.c
+++ b/src/test1.c
@@ -7608,15 +7608,19 @@ static int SQLITE_TCLAPI test_sqlite3_db_config(
const char *zName;
int eVal;
} aSetting[] = {
- { "FKEY", SQLITE_DBCONFIG_ENABLE_FKEY },
- { "TRIGGER", SQLITE_DBCONFIG_ENABLE_TRIGGER },
- { "FTS3_TOKENIZER", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
- { "LOAD_EXTENSION", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
- { "NO_CKPT_ON_CLOSE",SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
- { "QPSG", SQLITE_DBCONFIG_ENABLE_QPSG },
- { "TRIGGER_EQP", SQLITE_DBCONFIG_TRIGGER_EQP },
- { "RESET_DB", SQLITE_DBCONFIG_RESET_DATABASE },
- { "DEFENSIVE", SQLITE_DBCONFIG_DEFENSIVE },
+ { "FKEY", SQLITE_DBCONFIG_ENABLE_FKEY },
+ { "TRIGGER", SQLITE_DBCONFIG_ENABLE_TRIGGER },
+ { "FTS3_TOKENIZER", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
+ { "LOAD_EXTENSION", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
+ { "NO_CKPT_ON_CLOSE", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
+ { "QPSG", SQLITE_DBCONFIG_ENABLE_QPSG },
+ { "TRIGGER_EQP", SQLITE_DBCONFIG_TRIGGER_EQP },
+ { "RESET_DB", SQLITE_DBCONFIG_RESET_DATABASE },
+ { "DEFENSIVE", SQLITE_DBCONFIG_DEFENSIVE },
+ { "WRITABLE_SCHEMA", SQLITE_DBCONFIG_WRITABLE_SCHEMA },
+ { "LEGACY_ALTER_TABLE", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE },
+ { "NO_DQS_SCHEMA", SQLITE_DBCONFIG_NO_DQS_SCHEMA },
+ { "NO_DQS", SQLITE_DBCONFIG_NO_DQS },
};
int i;
int v;