From 084b1822300923b9d1500f9f40bc4fa75ee75c3c Mon Sep 17 00:00:00 2001 From: Sebastian Rabenhorst Date: Mon, 17 Nov 2025 12:56:18 +0100 Subject: [PATCH] Fix nil pointer for replicated database engine --- parser/parser_table.go | 2 +- .../ddl/create_database_replicated.sql | 1 + .../ddl/format/create_database_replicated.sql | 6 ++ ...create_database_replicated.sql.golden.json | 62 +++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 parser/testdata/ddl/create_database_replicated.sql create mode 100644 parser/testdata/ddl/format/create_database_replicated.sql create mode 100644 parser/testdata/ddl/output/create_database_replicated.sql.golden.json diff --git a/parser/parser_table.go b/parser/parser_table.go index 4dadf85..73c92e7 100644 --- a/parser/parser_table.go +++ b/parser/parser_table.go @@ -100,7 +100,7 @@ func (p *Parser) parseCreateDatabase(pos Pos) (*CreateDatabase, error) { return nil, err } if engineExpr != nil { - StatementEnd = onCluster.End() + StatementEnd = engineExpr.End() } commentExpr, err := p.tryParseComment() if err != nil { diff --git a/parser/testdata/ddl/create_database_replicated.sql b/parser/testdata/ddl/create_database_replicated.sql new file mode 100644 index 0000000..a406aca --- /dev/null +++ b/parser/testdata/ddl/create_database_replicated.sql @@ -0,0 +1 @@ +CREATE DATABASE IF NOT EXISTS `test` ENGINE=Replicated('/root/test_local', 'shard', 'replica'); diff --git a/parser/testdata/ddl/format/create_database_replicated.sql b/parser/testdata/ddl/format/create_database_replicated.sql new file mode 100644 index 0000000..32d74ec --- /dev/null +++ b/parser/testdata/ddl/format/create_database_replicated.sql @@ -0,0 +1,6 @@ +-- Origin SQL: +CREATE DATABASE IF NOT EXISTS `test` ENGINE=Replicated('/root/test_local', 'shard', 'replica'); + + +-- Format SQL: +CREATE DATABASE IF NOT EXISTS `test` ENGINE = Replicated('/root/test_local', 'shard', 'replica'); diff --git a/parser/testdata/ddl/output/create_database_replicated.sql.golden.json b/parser/testdata/ddl/output/create_database_replicated.sql.golden.json new file mode 100644 index 0000000..a08eb61 --- /dev/null +++ b/parser/testdata/ddl/output/create_database_replicated.sql.golden.json @@ -0,0 +1,62 @@ +[ + { + "CreatePos": 0, + "StatementEnd": 54, + "Name": { + "Name": "test", + "QuoteType": 3, + "NamePos": 31, + "NameEnd": 35 + }, + "IfNotExists": true, + "OnCluster": null, + "Engine": { + "EnginePos": 37, + "EngineEnd": 54, + "Name": "Replicated", + "Params": { + "LeftParenPos": 54, + "RightParenPos": 93, + "Items": { + "ListPos": 56, + "ListEnd": 92, + "HasDistinct": false, + "Items": [ + { + "Expr": { + "LiteralPos": 56, + "LiteralEnd": 72, + "Literal": "/root/test_local" + }, + "Alias": null + }, + { + "Expr": { + "LiteralPos": 76, + "LiteralEnd": 81, + "Literal": "shard" + }, + "Alias": null + }, + { + "Expr": { + "LiteralPos": 85, + "LiteralEnd": 92, + "Literal": "replica" + }, + "Alias": null + } + ] + }, + "ColumnArgList": null + }, + "PrimaryKey": null, + "PartitionBy": null, + "SampleBy": null, + "TTL": null, + "Settings": null, + "OrderBy": null + }, + "Comment": null + } +] \ No newline at end of file