aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2024-11-04 19:08:53 +0000
committerdrh <>2024-11-04 19:08:53 +0000
commitbc60d7bee9797ecc6f33128b36527b70371d1748 (patch)
tree8ded3cb0075beb5fe634315ff55ae71f9377c13c /src
parent4bf24c8830d21509df5819b0a2c7fdcd0e45f42e (diff)
downloadsqlite-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.y6
-rw-r--r--src/prepare.c9
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) ){