mirror of
https://github.com/dolthub/dolt.git
synced 2026-05-23 02:40:49 -05:00
Bug fixes for procedures
This commit is contained in:
@@ -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
@@ -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)
|
||||
|
||||
@@ -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" {
|
||||
|
||||
Reference in New Issue
Block a user