Merge 'Support sqlite_master schema table name alias' from Anton Harniakou

Related to #1641. Adds support for `sqlite_master` schema table name.

Reviewed-by: Diego Reis (@el-yawd)

Closes #1669
This commit is contained in:
Jussi Saurio 2025-06-09 08:23:58 +03:00
commit 9c9869f485
2 changed files with 37 additions and 2 deletions

View file

@ -14,6 +14,9 @@ use std::rc::Rc;
use std::sync::Arc;
use tracing::trace;
const SCHEMA_TABLE_NAME: &str = "sqlite_schema";
const SCHEMA_TABLE_NAME_ALT: &str = "sqlite_master";
pub struct Schema {
pub tables: HashMap<String, Arc<Table>>,
// table_name to list of indexes for the table
@ -26,7 +29,7 @@ impl Schema {
let indexes: HashMap<String, Vec<Arc<Index>>> = HashMap::new();
#[allow(clippy::arc_with_non_send_sync)]
tables.insert(
"sqlite_schema".to_string(),
SCHEMA_TABLE_NAME.to_string(),
Arc::new(Table::BTree(sqlite_schema_table().into())),
);
Self { tables, indexes }
@ -51,7 +54,12 @@ impl Schema {
pub fn get_table(&self, name: &str) -> Option<Arc<Table>> {
let name = normalize_ident(name);
self.tables.get(&name).cloned()
let name = if name.eq_ignore_ascii_case(&SCHEMA_TABLE_NAME_ALT) {
SCHEMA_TABLE_NAME
} else {
&name
};
self.tables.get(name).cloned()
}
pub fn remove_table(&mut self, table_name: &str) {

View file

@ -47,6 +47,33 @@ do_execsql_test pragma-table-info-call-syntax {
4|sql|TEXT|0||0
}
do_execsql_test pragma-table-info-alt-name-equal-syntax {
PRAGMA table_info=sqlite_master
} {0|type|TEXT|0||0
1|name|TEXT|0||0
2|tbl_name|TEXT|0||0
3|rootpage|INT|0||0
4|sql|TEXT|0||0
}
do_execsql_test pragma-table-info-alt-name-call-syntax {
PRAGMA table_info(sqlite_master)
} {0|type|TEXT|0||0
1|name|TEXT|0||0
2|tbl_name|TEXT|0||0
3|rootpage|INT|0||0
4|sql|TEXT|0||0
}
do_execsql_test pragma-function-table-info-alt-name {
SELECT * FROM pragma_table_info('sqlite_master')
} {0|type|TEXT|0||0
1|name|TEXT|0||0
2|tbl_name|TEXT|0||0
3|rootpage|INT|0||0
4|sql|TEXT|0||0
}
do_execsql_test pragma-function-table-info {
SELECT * FROM pragma_table_info('sqlite_schema')
} {0|type|TEXT|0||0