From d802075ea9b59a792b34ac587111872364c50388 Mon Sep 17 00:00:00 2001 From: Anton Harniakou Date: Wed, 28 May 2025 12:08:14 +0300 Subject: [PATCH] Resolve merge conflict: Add columns names to result set for pragma statement output --- core/translate/pragma.rs | 12 +++++++++++- core/vdbe/builder.rs | 11 +++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/core/translate/pragma.rs b/core/translate/pragma.rs index d7d72fd85..54ed4176c 100644 --- a/core/translate/pragma.rs +++ b/core/translate/pragma.rs @@ -23,7 +23,7 @@ fn list_pragmas(program: &mut ProgramBuilder) { let register = program.emit_string8_new_reg(x.to_string()); program.emit_result_row(register, 1); } - + program.add_pragma_result_column("pragma_list".into()); program.epilogue(crate::translate::emitter::TransactionMode::None); } @@ -279,10 +279,12 @@ fn query_pragma( register, ); program.emit_result_row(register, 1); + program.add_pragma_result_column("cache_size".into()); } PragmaName::JournalMode => { program.emit_string8("wal".into(), register); program.emit_result_row(register, 1); + program.add_pragma_result_column("journal_mode".into()); } PragmaName::LegacyFileFormat => {} PragmaName::WalCheckpoint => { @@ -303,6 +305,7 @@ fn query_pragma( dest: register, }); program.emit_result_row(register, 1); + program.add_pragma_result_column("page_count".into()); } PragmaName::TableInfo => { let table = match value { @@ -348,6 +351,10 @@ fn query_pragma( program.emit_result_row(base_reg, 6); } } + let col_names = ["cid", "name", "type", "notnull", "dflt_value", "pk"]; + for name in col_names { + program.add_pragma_result_column(name.into()); + } } PragmaName::UserVersion => { program.emit_insn(Insn::ReadCookie { @@ -355,6 +362,7 @@ fn query_pragma( dest: register, cookie: Cookie::UserVersion, }); + program.add_pragma_result_column("user_version".into()); program.emit_result_row(register, 1); } PragmaName::SchemaVersion => { @@ -363,11 +371,13 @@ fn query_pragma( dest: register, cookie: Cookie::SchemaVersion, }); + program.add_pragma_result_column("schema_version".into()); program.emit_result_row(register, 1); } PragmaName::PageSize => { program.emit_int(database_header.lock().get_page_size().into(), register); program.emit_result_row(register, 1); + program.add_pragma_result_column("page_size".into()); } PragmaName::AutoVacuum => { let auto_vacuum_mode = pager.get_auto_vacuum_mode(); diff --git a/core/vdbe/builder.rs b/core/vdbe/builder.rs index c2f9bfd1f..0da96dade 100644 --- a/core/vdbe/builder.rs +++ b/core/vdbe/builder.rs @@ -285,6 +285,17 @@ impl ProgramBuilder { cursor } + pub fn add_pragma_result_column(&mut self, col_name: String) { + // TODO figure out a better type definition for ResultSetColumn + // or invent another way to set pragma result columns + let expr = ast::Expr::Id(ast::Id("".to_string())); + self.result_columns.push(ResultSetColumn { + expr, + alias: Some(col_name), + contains_aggregates: false, + }); + } + #[instrument(skip(self), level = Level::TRACE)] pub fn emit_insn(&mut self, insn: Insn) { let function = insn.to_function();