Skip to content

Commit

Permalink
Merge pull request #2306 from kuzudb/fix-config-statement-as-write
Browse files Browse the repository at this point in the history
Fix call statement as write statement
  • Loading branch information
andyfengHKU committed Oct 31, 2023
2 parents 0061875 + 7f838ab commit 5db9186
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 8 deletions.
17 changes: 9 additions & 8 deletions src/include/binder/visitor/statement_read_write_analyzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,21 @@
namespace kuzu {
namespace binder {

class StatementReadWriteAnalyzer : public BoundStatementVisitor {
class StatementReadWriteAnalyzer final : public BoundStatementVisitor {
public:
StatementReadWriteAnalyzer() : BoundStatementVisitor(), readOnly{true} {}

bool isReadOnly(const BoundStatement& statement);

private:
void visitCommentOn(const BoundStatement& /*statement*/) override { readOnly = false; }
void visitCopyFrom(const BoundStatement& /*statement*/) override { readOnly = false; }
void visitCreateMacro(const BoundStatement& /*statement*/) override { readOnly = false; }
void visitCreateTable(const BoundStatement& /*statement*/) override { readOnly = false; }
void visitDropTable(const BoundStatement& /*statement*/) override { readOnly = false; }
void visitAlter(const BoundStatement& /*statement*/) override { readOnly = false; }
void visitQueryPart(const NormalizedQueryPart& queryPart) final;
void visitCommentOn(const BoundStatement& /*statement*/) { readOnly = false; }
void visitCopyFrom(const BoundStatement& /*statement*/) { readOnly = false; }
void visitCreateMacro(const BoundStatement& /*statement*/) { readOnly = false; }
void visitCreateTable(const BoundStatement& /*statement*/) { readOnly = false; }
void visitDropTable(const BoundStatement& /*statement*/) { readOnly = false; }
void visitAlter(const BoundStatement& /*statement*/) { readOnly = false; }
void visitStandaloneCall(const BoundStatement& /*statement*/) { readOnly = false; }
void visitQueryPart(const NormalizedQueryPart& queryPart);

private:
bool readOnly;
Expand Down
7 changes: 7 additions & 0 deletions test/test_files/tinysnb/call/call.test
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,10 @@ true
-STATEMENT CALL current_setting('enable_semi_mask') RETURN *
---- 1
false

-LOG CallTransaction
-STATEMENT BEGIN TRANSACTION READ ONLY;
---- ok
-STATEMENT CALL var_length_extend_max_depth=10
---- error
Can't execute a write query inside a read-only transaction.

0 comments on commit 5db9186

Please sign in to comment.