Skip to content
Merged
Show file tree
Hide file tree
Changes from 135 commits
Commits
Show all changes
137 commits
Select commit Hold shift + click to select a range
3cdb14e
temp
Feb 13, 2025
24f2c2a
progress
Feb 14, 2025
d9efee5
compiling?
Feb 14, 2025
0ce2416
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 14, 2025
e9ef941
compiling now?
Feb 14, 2025
3259879
merge
Feb 14, 2025
117410e
simplest select statement working
Feb 14, 2025
513f53d
better
Feb 17, 2025
eb6d741
progress
Feb 18, 2025
b653154
simple declare
Feb 19, 2025
ceb8331
implement if else
Feb 19, 2025
337227f
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 19, 2025
f204d8c
implement while loops
Feb 19, 2025
5b3f720
tmp
Feb 19, 2025
7272c8b
Merge branch 'james/proc' of https://github.com/dolthub/go-mysql-serv…
Feb 20, 2025
9b8cc89
repeat test
Feb 20, 2025
b19b8b5
implemented repeat
Feb 20, 2025
da6db05
double replace issue
Feb 21, 2025
347cdd3
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Feb 21, 2025
75caa07
introduce new ast type
Feb 24, 2025
159888b
Merge branch 'james/proc' of https://github.com/dolthub/go-mysql-serv…
Mar 4, 2025
a14047c
merge with main
Mar 4, 2025
9baa293
Merge branch 'main' into james/proc
Mar 11, 2025
c41fed4
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Mar 11, 2025
bf5a416
implement case errors
Mar 11, 2025
176bd60
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Mar 11, 2025
dd870f7
fix
Mar 12, 2025
4b451f6
asdf
Mar 12, 2025
0ae1290
out tests
Mar 12, 2025
37981e0
fix out params
Mar 12, 2025
ba3fc05
convert booleans
Mar 13, 2025
98dee06
merge
Mar 13, 2025
913db9e
vitess bump
Mar 13, 2025
0d935c6
test
Mar 13, 2025
0d59d6e
merge with main
Mar 13, 2025
1c4f9d5
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Mar 13, 2025
8c0243b
handle else if
Mar 13, 2025
d125dec
handle insert
Mar 13, 2025
7752521
error
Mar 13, 2025
08f8e72
test
Mar 13, 2025
b96bbc3
fix user vras
Mar 14, 2025
586c990
asdf
Mar 14, 2025
b0e0452
merge
Mar 14, 2025
fae1af9
declare
Mar 14, 2025
c42d39f
Merge branch 'main' into james/proc
Mar 14, 2025
ba4fedf
fix some typing issues
Mar 17, 2025
27f7b46
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Mar 17, 2025
ea7551d
select into and some declare
Mar 18, 2025
784cbd2
condition and signal logic
Mar 20, 2025
421ac42
fix
Mar 20, 2025
57ef575
updating test
Mar 20, 2025
a725615
cursor implementation
Mar 20, 2025
2501280
replace limit vals
Mar 20, 2025
227e6c3
fix declare logic
Mar 20, 2025
7e618d8
handlers
Mar 21, 2025
909d7df
fixing some handlers
Mar 21, 2025
967a4f5
asdf
Mar 21, 2025
4f915d2
various fixes
Mar 21, 2025
2f321d4
Merge branch 'james/proc' of https://github.com/dolthub/go-mysql-serv…
Mar 21, 2025
95b5bd9
debugging out params being null
Mar 22, 2025
9edbf92
fix assigning user vars
Mar 22, 2025
ca8e957
fix views in procs
Mar 22, 2025
fc036a0
fix table errors
Mar 22, 2025
4247bb7
adsf
Mar 24, 2025
ce59b97
merge with main
Mar 24, 2025
db95360
bump
Mar 24, 2025
c0a76f2
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Mar 24, 2025
70ea89f
fix handler scopes
Mar 24, 2025
e5bbdfc
fix declares
Mar 25, 2025
6a12f7a
debugging
Mar 25, 2025
6b7413b
external procs
Mar 25, 2025
247c5d4
fix external procs kinda
Mar 26, 2025
b826c32
merge
Mar 26, 2025
5717a23
merge with main
Mar 26, 2025
1462fc7
bump
Mar 26, 2025
a5de726
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Mar 26, 2025
77d7501
todos
Mar 27, 2025
423e8bd
fix as of
Mar 31, 2025
a7feeda
fix join
Mar 31, 2025
2027f89
not sure what's wrong with double insert yet
Mar 31, 2025
3fc5e1d
merge with main
Apr 1, 2025
9df3d57
fixing triggers
Apr 1, 2025
742e9a8
stored procedures from triggers
Apr 2, 2025
7514559
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Apr 2, 2025
7969c06
go mod tidy
Apr 2, 2025
e7c820f
Merge branch 'james/proc' of https://github.com/dolthub/go-mysql-serv…
Apr 2, 2025
6f570b0
fix parameters
Apr 4, 2025
0872ac1
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Apr 4, 2025
35c46fe
test
Apr 4, 2025
981ed7f
Merge branch 'james/proc' of https://github.com/dolthub/go-mysql-serv…
Apr 4, 2025
c137d53
fix external procs
Apr 4, 2025
cdfc450
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Apr 4, 2025
ba4c923
debugging
Apr 4, 2025
112769f
fix?
Apr 8, 2025
b89f244
merge with main
Apr 8, 2025
d364eef
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Apr 8, 2025
d77b59a
fix
Apr 8, 2025
8c87be3
asdf
Apr 8, 2025
4e5e399
cleaning up
Apr 8, 2025
d35aea7
merge with main
Apr 11, 2025
50fbea8
bump
Apr 11, 2025
a205f74
fix schemas
Apr 11, 2025
7509fb7
this?
Apr 11, 2025
25087dd
asdfasdfafdg
Apr 11, 2025
de57c56
aaaaaaaa
Apr 11, 2025
64ad194
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Apr 11, 2025
5de9a32
dfasdfasdf
Apr 11, 2025
2d4d652
remove todos
Apr 11, 2025
58466c3
skip for the server
Apr 11, 2025
0d1adac
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Apr 11, 2025
fa59db2
merge with main
Apr 14, 2025
4d62d31
bump
jycor Apr 14, 2025
523207e
Merge branch 'main' into james/proc
jycor Apr 14, 2025
611dd73
merge with main
Apr 18, 2025
b7d7c61
bump
Apr 18, 2025
e64f37f
some feedback
Apr 21, 2025
70a3a2b
Merge branch 'main' into james/proc
Apr 22, 2025
8450a2a
preserve transactions
Apr 22, 2025
4f4eac7
comments
Apr 22, 2025
74a0a8e
progress
Apr 24, 2025
15d34c0
progress
Apr 24, 2025
a34f76e
progress
Apr 24, 2025
4823d27
merge with main
Apr 24, 2025
c127a7e
Merge branch 'james/proc' of github.com:dolthub/go-mysql-server into …
Apr 24, 2025
b67e4ec
bump
Apr 25, 2025
7862ef1
fix?
Apr 25, 2025
c601f3f
remove unused functions
Apr 25, 2025
3cbd94d
rename interpreter expression
Apr 26, 2025
bd61442
close iters when popping
Apr 26, 2025
9b72c7e
fixing comments
Apr 26, 2025
e8c7fbe
merge with main
Apr 27, 2025
9d3cb59
better context
Apr 28, 2025
f6f4b91
[ga-format-pr] Run ./format_repo.sh to fix formatting
jycor Apr 28, 2025
8527450
Merge branch 'main' into james/proc
Apr 29, 2025
a6f8e51
add missing ast nodes
Apr 29, 2025
9b13d2c
remove unused file
Apr 30, 2025
f106722
bump
Apr 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ type Engine struct {
Parser sql.Parser
}

var _ analyzer.StatementRunner = (*Engine)(nil)
var _ sql.StatementRunner = (*Engine)(nil)

type ColumnWithRawDefault struct {
SqlColumn *sql.Column
Expand Down
22 changes: 16 additions & 6 deletions enginetest/memory_engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,26 +205,36 @@ func TestSingleScript(t *testing.T) {
t.Skip()
var scripts = []queries.ScriptTest{
{
Name: "test script",
SetUpScript: []string{
"create table t (i int);",
},
Name: "AS OF propagates to nested CALLs",
SetUpScript: []string{},
Assertions: []queries.ScriptTestAssertion{
{
Query: "select 1 into @a",
Expected: []sql.Row{},
Query: "create procedure create_proc() create table t (i int primary key, j int);",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
Query: "call create_proc()",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
},
},
}

for _, test := range scripts {
harness := enginetest.NewMemoryHarness("", 1, testNumPartitions, true, nil)
harness.UseServer()
engine, err := harness.NewEngine(t)
if err != nil {
panic(err)
}

//engine.EngineAnalyzer().Debug = true
//engine.EngineAnalyzer().Verbose = true

enginetest.TestScriptWithEngine(t, engine, harness, test)
}
}
Expand Down
181 changes: 145 additions & 36 deletions enginetest/queries/procedure_queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"time"

"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/plan"
"github.com/dolthub/go-mysql-server/sql/types"
)

Expand Down Expand Up @@ -75,17 +76,13 @@ var ProcedureLogicTests = []ScriptTest{
{
Query: "CALL testabc(2, 3)",
Expected: []sql.Row{
{
6.0,
},
{6.0},
},
},
{
Query: "CALL testabc(9, 9.5)",
Expected: []sql.Row{
{
85.5,
},
{85.5},
},
},
},
Expand Down Expand Up @@ -906,9 +903,11 @@ END;`,
SetUpScript: []string{
"CREATE TABLE inventory (item_id int primary key, shelf_id int, item varchar(10))",
"INSERT INTO inventory VALUES (1, 1, 'a'), (2, 1, 'b'), (3, 2, 'c'), (4, 1, 'd'), (5, 4, 'e')",
`CREATE PROCEDURE count_and_print(IN p_shelf_id INT, OUT p_count INT) BEGIN
SELECT item FROM inventory WHERE shelf_id = p_shelf_id ORDER BY item ASC;
SELECT COUNT(*) INTO p_count FROM inventory WHERE shelf_id = p_shelf_id;
`
CREATE PROCEDURE count_and_print(IN p_shelf_id INT, OUT p_count INT)
BEGIN
SELECT item FROM inventory WHERE shelf_id = p_shelf_id ORDER BY item ASC;
SELECT COUNT(*) INTO p_count FROM inventory WHERE shelf_id = p_shelf_id;
END`,
},
Assertions: []ScriptTestAssertion{
Expand Down Expand Up @@ -989,8 +988,12 @@ END;`,
Expected: []sql.Row{{}},
},
{
Query: "CALL p1(@x);",
Expected: []sql.Row{{}},
// TODO: Set statements don't return anything for whatever reason
SkipResultCheckOnServerEngine: true,
Query: "CALL p1(@x);",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
Query: "SELECT @x;",
Expand Down Expand Up @@ -1020,8 +1023,6 @@ BEGIN
ELSEIF x = 4 THEN
SIGNAL specialty2;
ELSE
SIGNAL SQLSTATE '01000'
SET MESSAGE_TEXT = 'A warning occurred', MYSQL_ERRNO = 1000;
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'An error occurred', MYSQL_ERRNO = 1001;
END IF;
Expand Down Expand Up @@ -1051,6 +1052,10 @@ END;`,
Query: "CALL p1(4)",
ExpectedErrStr: "Unhandled user-defined not found condition (errno 1643) (sqlstate 02000)",
},
{
Query: "CALL p1(5)",
ExpectedErrStr: "An error occurred (errno 1001) (sqlstate 45000)",
},
},
},
{
Expand Down Expand Up @@ -1266,17 +1271,18 @@ END;`,
`CREATE PROCEDURE duplicate_key()
BEGIN
DECLARE a, b INT DEFAULT 1;
BEGIN
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET a = 7;
INSERT INTO t1 values (0);
END;
SELECT a;
END;
SELECT a;
END;`,
},
Assertions: []ScriptTestAssertion{
{
Query: "CALL eof();",
Expected: []sql.Row{},
// TODO: MySQL returns: ERROR: 1329: No data - zero rows fetched, selected, or processed
Query: "CALL eof();",
ExpectedErrStr: "exhausted fetch iterator",
},
{
Query: "CALL duplicate_key();",
Expand Down Expand Up @@ -1392,8 +1398,12 @@ END;`,
},
Assertions: []ScriptTestAssertion{
{
Query: "CALL outer_declare();",
Expected: []sql.Row{},
// TODO: Set statements don't return anything for whatever reason
SkipResultCheckOnServerEngine: true,
Query: "CALL outer_declare();",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
Query: "CALL inner_declare();",
Expand Down Expand Up @@ -2214,9 +2224,7 @@ var ProcedureCallTests = []ScriptTest{
{
Query: "SELECT @outparam",
Expected: []sql.Row{
{
nil,
},
{nil},
},
},
},
Expand Down Expand Up @@ -2270,9 +2278,7 @@ var ProcedureCallTests = []ScriptTest{
{
Query: "SELECT @outparam",
Expected: []sql.Row{
{
int64(777),
},
{int64(777)},
},
},
},
Expand Down Expand Up @@ -2831,19 +2837,118 @@ var ProcedureCreateInSubroutineTests = []ScriptTest{
},
},
},

{
Name: "procedure must not contain CREATE TABLE",
Name: "table ddl statements in stored procedures",
Assertions: []ScriptTestAssertion{
{
Query: "create procedure p() create table t (pk int);",
ExpectedErrStr: "CREATE statements in CREATE PROCEDURE not yet supported",
Query: "create procedure create_proc() create table t (i int primary key, j int);",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
SkipResultCheckOnServerEngine: true,
Query: "call create_proc()",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
Query: "show create table t;",
Expected: []sql.Row{
{"t", "CREATE TABLE `t` (\n" +
" `i` int NOT NULL,\n" +
" `j` int,\n" +
" PRIMARY KEY (`i`)\n" +
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_bin"},
},
},
{
Query: "call create_proc()",
ExpectedErrStr: "table with name t already exists",
},

{
Query: "create procedure p() begin create table t (pk int); end;",
ExpectedErrStr: "CREATE statements in CREATE PROCEDURE not yet supported",
Query: "create procedure insert_proc() insert into t values (1, 1), (2, 2), (3, 3);",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
SkipResultCheckOnServerEngine: true,
Query: "call insert_proc()",
Expected: []sql.Row{
{types.NewOkResult(3)},
},
},
{
Query: "select * from t",
Expected: []sql.Row{
{1, 1},
{2, 2},
{3, 3},
},
},
{
SkipResultCheckOnServerEngine: true,
Query: "call insert_proc()",
ExpectedErrStr: "duplicate primary key given: [1]",
},

{
Query: "create procedure update_proc() update t set j = 999 where i > 1;",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
SkipResultCheckOnServerEngine: true,
Query: "call update_proc()",
Expected: []sql.Row{
{types.OkResult{RowsAffected: 2, Info: plan.UpdateInfo{Matched: 2, Updated: 2}}},
},
},
{
Query: "select * from t",
Expected: []sql.Row{
{1, 1},
{2, 999},
{3, 999},
},
},
{
SkipResultCheckOnServerEngine: true,
Query: "call update_proc()",
Expected: []sql.Row{
{types.OkResult{RowsAffected: 0, Info: plan.UpdateInfo{Matched: 2}}},
},
},

{
Query: "create procedure drop_proc() drop table t;",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
SkipResultCheckOnServerEngine: true,
Query: "call drop_proc()",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
Query: "show tables like 't'",
Expected: []sql.Row{},
},
{
Query: "call drop_proc()",
ExpectedErrStr: "table not found: t",
},
},
},

{
Name: "procedure must not contain CREATE TRIGGER",
SetUpScript: []string{
Expand Down Expand Up @@ -2875,16 +2980,20 @@ var ProcedureCreateInSubroutineTests = []ScriptTest{
},
},
{
Name: "procedure must not contain CREATE VIEW",
Name: "procedure can CREATE VIEW",
SetUpScript: []string{},
Assertions: []ScriptTestAssertion{
{
Query: "create procedure p() create view v as select 1;",
ExpectedErrStr: "CREATE statements in CREATE PROCEDURE not yet supported",
Query: "create procedure p1() create view v as select 1;",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
{
Query: "create procedure p() begin create view v as select 1; end;",
ExpectedErrStr: "CREATE statements in CREATE PROCEDURE not yet supported",
Query: "create procedure p() begin create view v as select 1; end;",
Expected: []sql.Row{
{types.NewOkResult(0)},
},
},
},
},
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ require (
github.com/dolthub/go-icu-regex v0.0.0-20250327004329-6799764f2dad
github.com/dolthub/jsonpath v0.0.2-0.20240227200619-19675ab05c71
github.com/dolthub/sqllogictest/go v0.0.0-20201107003712-816f3ae12d81
github.com/dolthub/vitess v0.0.0-20250423221552-f731ee5c5379
github.com/dolthub/vitess v0.0.0-20250424225619-bfb20390c1d1
github.com/go-kit/kit v0.10.0
github.com/go-sql-driver/mysql v1.7.2-0.20231213112541-0004702b931d
github.com/gocraft/dbr/v2 v2.7.2
Expand Down
10 changes: 2 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,8 @@ github.com/dolthub/jsonpath v0.0.2-0.20240227200619-19675ab05c71 h1:bMGS25NWAGTE
github.com/dolthub/jsonpath v0.0.2-0.20240227200619-19675ab05c71/go.mod h1:2/2zjLQ/JOOSbbSboojeg+cAwcRV0fDLzIiWch/lhqI=
github.com/dolthub/sqllogictest/go v0.0.0-20201107003712-816f3ae12d81 h1:7/v8q9XGFa6q5Ap4Z/OhNkAMBaK5YeuEzwJt+NZdhiE=
github.com/dolthub/sqllogictest/go v0.0.0-20201107003712-816f3ae12d81/go.mod h1:siLfyv2c92W1eN/R4QqG/+RjjX5W2+gCTRjZxBjI3TY=
github.com/dolthub/vitess v0.0.0-20250410233614-8d8c7a5b3d6b h1:2wE+qJwJ5SRIzz+dJQT8XbkpK+g8/pFt34AU/iJ5K+Y=
github.com/dolthub/vitess v0.0.0-20250410233614-8d8c7a5b3d6b/go.mod h1:1gQZs/byeHLMSul3Lvl3MzioMtOW1je79QYGyi2fd70=
github.com/dolthub/vitess v0.0.0-20250414165810-f0031a6472b7 h1:4Y043kZgAH1WhOER0nk+02KPKxJX8Ir6yK7cGzY04c4=
github.com/dolthub/vitess v0.0.0-20250414165810-f0031a6472b7/go.mod h1:1gQZs/byeHLMSul3Lvl3MzioMtOW1je79QYGyi2fd70=
github.com/dolthub/vitess v0.0.0-20250417230335-b8d80bc39341 h1:qebIGlJEgi/mSXVZ39P77cklPuuIl8gApyTVMnKm79s=
github.com/dolthub/vitess v0.0.0-20250417230335-b8d80bc39341/go.mod h1:1gQZs/byeHLMSul3Lvl3MzioMtOW1je79QYGyi2fd70=
github.com/dolthub/vitess v0.0.0-20250423221552-f731ee5c5379 h1:3nPFx23Ol0djIPf9rDw/y38yEn1BXqTXOUkYrWfxrEI=
github.com/dolthub/vitess v0.0.0-20250423221552-f731ee5c5379/go.mod h1:1gQZs/byeHLMSul3Lvl3MzioMtOW1je79QYGyi2fd70=
github.com/dolthub/vitess v0.0.0-20250424225619-bfb20390c1d1 h1:ZXssuc0ZNqKUD7xQCd0/xLT+nKrmAetNYb5v7xgU0U0=
github.com/dolthub/vitess v0.0.0-20250424225619-bfb20390c1d1/go.mod h1:1gQZs/byeHLMSul3Lvl3MzioMtOW1je79QYGyi2fd70=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
Expand Down
2 changes: 1 addition & 1 deletion sql/analyzer/analyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ type Analyzer struct {
// ExecBuilder converts a sql.Node tree into an executable iterator.
ExecBuilder sql.NodeExecBuilder
// Runner represents the engine, which is represented as a separate interface to work around circular dependencies
Runner StatementRunner
Runner sql.StatementRunner
// Parser is the parser used to parse SQL statements.
Parser sql.Parser
// SchemaFormatter is used to format the schema of a node to a string.
Expand Down
Loading
Loading