Skip to content

Commit bfc48c7

Browse files
authored
sqlite: Add support for CREATE TABLE ... STRICT (#2175)
Switch to v4 of ANTLR (which we were already kind of using)
1 parent 73d9290 commit bfc48c7

22 files changed

+4488
-3145
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/kyleconroy/sqlc
33
go 1.20
44

55
require (
6-
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10
6+
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1
77
github.com/bytecodealliance/wasmtime-go/v5 v5.0.0
88
github.com/cubicdaiya/gonp v1.0.4
99
github.com/davecgh/go-spew v1.1.1
@@ -25,7 +25,7 @@ require (
2525
require (
2626
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect
2727
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
28-
golang.org/x/exp v0.0.0-20220428152302-39d4317da171 // indirect
28+
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
2929
)
3030

3131
require (

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
22
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
33
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
4-
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves=
5-
github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
4+
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 h1:X8MJ0fnN5FPdcGF5Ij2/OW+HgiJrRg3AfHAx1PJtIzM=
5+
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM=
66
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
77
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
88
github.com/bytecodealliance/wasmtime-go/v5 v5.0.0 h1:Ue3eBDElMrdzWoUtr7uPr7NeDZriuR5oIivp5EHknQU=
@@ -201,8 +201,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y
201201
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
202202
golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
203203
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
204-
golang.org/x/exp v0.0.0-20220428152302-39d4317da171 h1:TfdoLivD44QwvssI9Sv1xwa5DcL5XQr4au4sZ2F2NV4=
205-
golang.org/x/exp v0.0.0-20220428152302-39d4317da171/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
204+
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA=
205+
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA=
206206
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
207207
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
208208
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=

internal/endtoend/testdata/ddl_create_table_strict/sqlite/go/db.go

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_create_table_strict/sqlite/go/models.go

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/ddl_create_table_strict/sqlite/go/query.sql.go

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- name: Placeholder :exec
2+
SELECT 1;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CREATE TABLE venues (name text) STRICT;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "sqlite",
7+
"name": "querytest",
8+
"schema": "schema.sql",
9+
"queries": "query.sql"
10+
}
11+
]
12+
}

internal/engine/sqlite/convert.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"strconv"
66
"strings"
77

8-
"github.com/antlr/antlr4/runtime/Go/antlr"
8+
"github.com/antlr/antlr4/runtime/Go/antlr/v4"
99

1010
"github.com/kyleconroy/sqlc/internal/debug"
1111
"github.com/kyleconroy/sqlc/internal/engine/sqlite/parser"

internal/engine/sqlite/parse.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"fmt"
66
"io"
77

8-
"github.com/antlr/antlr4/runtime/Go/antlr"
8+
"github.com/antlr/antlr4/runtime/Go/antlr/v4"
99

1010
"github.com/kyleconroy/sqlc/internal/engine/sqlite/parser"
1111
"github.com/kyleconroy/sqlc/internal/metadata"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
antlr-4.12.0-complete.jar
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,7 @@
1-
sqlite_parser.go: SQLiteLexer.g4 SQLiteParser.g4
2-
antlr -Dlanguage=Go SQLiteLexer.g4 SQLiteParser.g4
1+
sqlite_parser.go: SQLiteLexer.g4 SQLiteParser.g4 antlr-4.12.0-complete.jar
2+
java -jar antlr-4.12.0-complete.jar -Dlanguage=Go SQLiteLexer.g4 SQLiteParser.g4
3+
4+
antlr-4.12.0-complete.jar:
5+
curl -O https://www.antlr.org/download/antlr-4.12.0-complete.jar
6+
7+

internal/engine/sqlite/parser/SQLiteLexer.g4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ ROWS_: R O W S;
160160
SAVEPOINT_: S A V E P O I N T;
161161
SELECT_: S E L E C T;
162162
SET_: S E T;
163+
STRICT_: S T R I C T;
163164
TABLE_: T A B L E;
164165
TEMP_: T E M P;
165166
TEMPORARY_: T E M P O R A R Y;

internal/engine/sqlite/parser/SQLiteLexer.interp

Lines changed: 4 additions & 1 deletion
Large diffs are not rendered by default.

internal/engine/sqlite/parser/SQLiteLexer.tokens

Lines changed: 63 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -129,68 +129,69 @@ ROWS_=128
129129
SAVEPOINT_=129
130130
SELECT_=130
131131
SET_=131
132-
TABLE_=132
133-
TEMP_=133
134-
TEMPORARY_=134
135-
THEN_=135
136-
TO_=136
137-
TRANSACTION_=137
138-
TRIGGER_=138
139-
UNION_=139
140-
UNIQUE_=140
141-
UPDATE_=141
142-
USING_=142
143-
VACUUM_=143
144-
VALUES_=144
145-
VIEW_=145
146-
VIRTUAL_=146
147-
WHEN_=147
148-
WHERE_=148
149-
WITH_=149
150-
WITHOUT_=150
151-
FIRST_VALUE_=151
152-
OVER_=152
153-
PARTITION_=153
154-
RANGE_=154
155-
PRECEDING_=155
156-
UNBOUNDED_=156
157-
CURRENT_=157
158-
FOLLOWING_=158
159-
CUME_DIST_=159
160-
DENSE_RANK_=160
161-
LAG_=161
162-
LAST_VALUE_=162
163-
LEAD_=163
164-
NTH_VALUE_=164
165-
NTILE_=165
166-
PERCENT_RANK_=166
167-
RANK_=167
168-
ROW_NUMBER_=168
169-
GENERATED_=169
170-
ALWAYS_=170
171-
STORED_=171
172-
TRUE_=172
173-
FALSE_=173
174-
WINDOW_=174
175-
NULLS_=175
176-
FIRST_=176
177-
LAST_=177
178-
FILTER_=178
179-
GROUPS_=179
180-
EXCLUDE_=180
181-
TIES_=181
182-
OTHERS_=182
183-
DO_=183
184-
NOTHING_=184
185-
IDENTIFIER=185
186-
NUMERIC_LITERAL=186
187-
BIND_PARAMETER=187
188-
STRING_LITERAL=188
189-
BLOB_LITERAL=189
190-
SINGLE_LINE_COMMENT=190
191-
MULTILINE_COMMENT=191
192-
SPACES=192
193-
UNEXPECTED_CHAR=193
132+
STRICT_=132
133+
TABLE_=133
134+
TEMP_=134
135+
TEMPORARY_=135
136+
THEN_=136
137+
TO_=137
138+
TRANSACTION_=138
139+
TRIGGER_=139
140+
UNION_=140
141+
UNIQUE_=141
142+
UPDATE_=142
143+
USING_=143
144+
VACUUM_=144
145+
VALUES_=145
146+
VIEW_=146
147+
VIRTUAL_=147
148+
WHEN_=148
149+
WHERE_=149
150+
WITH_=150
151+
WITHOUT_=151
152+
FIRST_VALUE_=152
153+
OVER_=153
154+
PARTITION_=154
155+
RANGE_=155
156+
PRECEDING_=156
157+
UNBOUNDED_=157
158+
CURRENT_=158
159+
FOLLOWING_=159
160+
CUME_DIST_=160
161+
DENSE_RANK_=161
162+
LAG_=162
163+
LAST_VALUE_=163
164+
LEAD_=164
165+
NTH_VALUE_=165
166+
NTILE_=166
167+
PERCENT_RANK_=167
168+
RANK_=168
169+
ROW_NUMBER_=169
170+
GENERATED_=170
171+
ALWAYS_=171
172+
STORED_=172
173+
TRUE_=173
174+
FALSE_=174
175+
WINDOW_=175
176+
NULLS_=176
177+
FIRST_=177
178+
LAST_=178
179+
FILTER_=179
180+
GROUPS_=180
181+
EXCLUDE_=181
182+
TIES_=182
183+
OTHERS_=183
184+
DO_=184
185+
NOTHING_=185
186+
IDENTIFIER=186
187+
NUMERIC_LITERAL=187
188+
BIND_PARAMETER=188
189+
STRING_LITERAL=189
190+
BLOB_LITERAL=190
191+
SINGLE_LINE_COMMENT=191
192+
MULTILINE_COMMENT=192
193+
SPACES=193
194+
UNEXPECTED_CHAR=194
194195
';'=1
195196
'.'=2
196197
'('=3

internal/engine/sqlite/parser/SQLiteParser.g4

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ create_table_stmt:
122122
schema_name DOT
123123
)? table_name (
124124
OPEN_PAR column_def (COMMA column_def)*? (COMMA table_constraint)* CLOSE_PAR (
125-
WITHOUT_ row_ROW_ID = IDENTIFIER
125+
(WITHOUT_ row_ROW_ID = IDENTIFIER) | (STRICT_)
126126
)?
127127
| AS_ select_stmt
128128
)
@@ -756,6 +756,7 @@ keyword:
756756
| SAVEPOINT_
757757
| SELECT_
758758
| SET_
759+
| STRICT_
759760
| TABLE_
760761
| TEMP_
761762
| TEMPORARY_

internal/engine/sqlite/parser/SQLiteParser.interp

Lines changed: 3 additions & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)