diff options
author | drh <> | 2024-11-04 19:08:53 +0000 |
---|---|---|
committer | drh <> | 2024-11-04 19:08:53 +0000 |
commit | bc60d7bee9797ecc6f33128b36527b70371d1748 (patch) | |
tree | 8ded3cb0075beb5fe634315ff55ae71f9377c13c /src | |
parent | 4bf24c8830d21509df5819b0a2c7fdcd0e45f42e (diff) | |
download | sqlite-bc60d7bee9797ecc6f33128b36527b70371d1748.tar.gz sqlite-bc60d7bee9797ecc6f33128b36527b70371d1748.zip |
Ensure that the database encoding is detected before the code generator gets
too far down into byte-code generation and execution, but not so early that
it interferes with initialization.
[forum:/forumpost/bc75a4d20b756044|Forum thread bc75a4d20b756044].
FossilOrigin-Name: af7173a10ec6a4ab465207c1ee20393e8b5f06604c0f3b2fdc19e52c2fc013d5
Diffstat (limited to 'src')
-rw-r--r-- | src/parse.y | 6 | ||||
-rw-r--r-- | src/prepare.c | 9 |
2 files changed, 6 insertions, 9 deletions
diff --git a/src/parse.y b/src/parse.y index a6a5e046d..8fdea9bfa 100644 --- a/src/parse.y +++ b/src/parse.y @@ -499,7 +499,11 @@ cmd ::= DROP VIEW ifexists(E) fullname(X). { // cmd ::= select(X). { SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0}; - sqlite3Select(pParse, X, &dest); + if( (pParse->db->mDbFlags & DBFLAG_EncodingFixed)!=0 + || sqlite3ReadSchema(pParse)==SQLITE_OK + ){ + sqlite3Select(pParse, X, &dest); + } sqlite3SelectDelete(pParse->db, X); } diff --git a/src/prepare.c b/src/prepare.c index 7aa1e1a02..de364f925 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -306,14 +306,7 @@ int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg, u32 mFlags){ #else encoding = SQLITE_UTF8; #endif - if( db->nVdbeActive>0 && encoding!=ENC(db) - && (db->mDbFlags & DBFLAG_Vacuum)==0 - ){ - rc = SQLITE_LOCKED; - goto initone_error_out; - }else{ - sqlite3SetTextEncoding(db, encoding); - } + sqlite3SetTextEncoding(db, encoding); }else{ /* If opening an attached database, the encoding much match ENC(db) */ if( (meta[BTREE_TEXT_ENCODING-1] & 3)!=ENC(db) ){ |