Bug fixes for procedures

This commit is contained in:
Zach Musgrave
2023-02-20 12:07:26 -08:00
parent 85eedab5d7
commit b0ad478fe7
3 changed files with 55 additions and 28 deletions
+24 -26
View File
@@ -35,7 +35,6 @@ import (
"github.com/dolthub/dolt/go/libraries/doltcore/env"
"github.com/dolthub/dolt/go/libraries/doltcore/mvdata"
"github.com/dolthub/dolt/go/libraries/doltcore/schema"
"github.com/dolthub/dolt/go/libraries/doltcore/sqle"
"github.com/dolthub/dolt/go/libraries/doltcore/table"
"github.com/dolthub/dolt/go/libraries/doltcore/table/editor"
"github.com/dolthub/dolt/go/libraries/doltcore/table/untyped/sqlexport"
@@ -228,34 +227,23 @@ func dumpSchemaElements(ctx context.Context, dEnv *env.DoltEnv, path string) err
if err != nil {
return errhand.VerboseErrorFromError(err)
}
dbs := engine.GetUnderlyingEngine().Analyzer.Catalog.AllDatabases(sqlCtx)
var db sqle.SqlDatabase
for _, d := range dbs {
doltDb, ok := d.(sqle.SqlDatabase)
if !ok {
continue
}
db = doltDb
break
root, err := dEnv.WorkingRoot(ctx)
if err != nil {
return errhand.VerboseErrorFromError(err)
}
if db == nil {
return errhand.BuildDError("error: failed to get database").Build()
}
err = dumpViews(sqlCtx, engine, db, writer)
err = dumpViews(sqlCtx, engine, root, writer)
if err != nil {
return errhand.VerboseErrorFromError(err)
}
err = dumpTriggers(sqlCtx, engine, db, writer)
err = dumpTriggers(sqlCtx, engine, root, writer)
if err != nil {
return errhand.VerboseErrorFromError(err)
}
err = dumpProcedures(sqlCtx, engine, db, writer)
err = dumpProcedures(sqlCtx, engine, root, writer)
if err != nil {
return errhand.VerboseErrorFromError(err)
}
@@ -268,8 +256,8 @@ func dumpSchemaElements(ctx context.Context, dEnv *env.DoltEnv, path string) err
return nil
}
func dumpProcedures(sqlCtx *sql.Context, engine *engine.SqlEngine, db sqle.SqlDatabase, writer io.WriteCloser) (rerr error) {
_, ok, err := db.GetTableInsensitive(sqlCtx, doltdb.ProceduresTableName)
func dumpProcedures(sqlCtx *sql.Context, engine *engine.SqlEngine, root *doltdb.RootValue, writer io.WriteCloser) (rerr error) {
_, _, ok, err := root.GetTableInsensitive(sqlCtx, doltdb.ProceduresTableName)
if err != nil {
return err
}
@@ -300,17 +288,27 @@ func dumpProcedures(sqlCtx *sql.Context, engine *engine.SqlEngine, db sqle.SqlDa
return err
}
err = iohelp.WriteLine(writer, fmt.Sprintf("delimiter END_PROCEDURE"))
if err != nil {
return err
}
err = iohelp.WriteLine(writer, fmt.Sprintf("%s;", row[stmtColIdx]))
if err != nil {
return err
}
err = iohelp.WriteLine(writer, fmt.Sprintf("END_PROCEDURE\ndelimiter ;"))
if err != nil {
return err
}
}
return nil
}
func dumpTriggers(sqlCtx *sql.Context, engine *engine.SqlEngine, db sqle.SqlDatabase, writer io.WriteCloser) (rerr error) {
_, ok, err := db.GetTableInsensitive(sqlCtx, doltdb.SchemasTableName)
func dumpTriggers(sqlCtx *sql.Context, engine *engine.SqlEngine, root *doltdb.RootValue, writer io.WriteCloser) (rerr error) {
_, _, ok, err := root.GetTableInsensitive(sqlCtx, doltdb.SchemasTableName)
if err != nil {
return err
}
@@ -355,8 +353,8 @@ func dumpTriggers(sqlCtx *sql.Context, engine *engine.SqlEngine, db sqle.SqlData
return nil
}
func dumpViews(ctx *sql.Context, engine *engine.SqlEngine, db sqle.SqlDatabase, writer io.WriteCloser) (rerr error) {
_, ok, err := db.GetTableInsensitive(ctx, doltdb.SchemasTableName)
func dumpViews(ctx *sql.Context, engine *engine.SqlEngine, root *doltdb.RootValue, writer io.WriteCloser) (rerr error) {
_, _, ok, err := root.GetTableInsensitive(ctx, doltdb.SchemasTableName)
if err != nil {
return err
}
+1 -2
View File
@@ -298,8 +298,7 @@ func MultiEnvForDirectory(
enforceSingleFormat(envSet)
// if the current directory database is in out set,
// add it first so it will be the current database
// if the current directory database is in our set, add it first so it will be the current database
var ok bool
if dEnv, ok = envSet[dbName]; ok {
mrEnv.AddEnv(dbName, dEnv)
+30
View File
@@ -242,7 +242,29 @@ teardown() {
dolt sql -q "CREATE TRIGGER trigger3 AFTER INSERT ON a FOR EACH ROW FOLLOWS trigger2 INSERT INTO b VALUES (new.x * 2);"
dolt sql -q "CREATE TRIGGER trigger4 AFTER INSERT ON a FOR EACH ROW PRECEDES trigger3 INSERT INTO b VALUES (new.x * 2);"
dolt sql -q "CREATE PROCEDURE p1 (in x int) select x from dual"
dolt sql <<SQL
delimiter //
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END
//
SQL
dolt sql <<SQL
delimiter //
CREATE PROCEDURE dorepeat2(p2 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p2 END REPEAT;
END
//
SQL
# decoy database in this directory to make sure we export the correct database's triggers etc.
dolt sql -q "create database aadecoy"
dolt add .
dolt commit -m "create tables"
@@ -309,6 +331,14 @@ teardown() {
run dolt sql -q "show create procedure p1"
[ "$status" -eq 0 ]
[[ "$output" =~ 'CREATE PROCEDURE p1 (in x int) select x' ]] || false
run dolt sql -q "show create procedure dorepeat"
[ "$status" -eq 0 ]
[[ "$output" =~ 'CREATE PROCEDURE dorepeat(p1' ]] || false
run dolt sql -q "show create procedure dorepeat2"
[ "$status" -eq 0 ]
[[ "$output" =~ 'CREATE PROCEDURE dorepeat2(p2' ]] || false
}
@test "dump: SQL type - with keyless tables" {