Skip to content

Commit

Permalink
working tests, addressed gavins feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
brennanjl committed May 21, 2024
1 parent 439106a commit 5f3fd01
Show file tree
Hide file tree
Showing 37 changed files with 4,836 additions and 3,797 deletions.
6 changes: 3 additions & 3 deletions core/types/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ type Schema struct {
}

// Clean validates rules about the data in the struct (naming conventions, syntax, etc.).
func (s *Schema) Clean() error {
err := cleanIdent(&s.Name)
func (s *Schema) Clean() (err error) {
err = cleanIdent(&s.Name)
if err != nil {
return err
}
Expand Down Expand Up @@ -1228,7 +1228,7 @@ func (c *DataType) Equals(other *DataType) bool {
}

func (c *DataType) IsNumeric() bool {
return c.Name == intStr || c.Name == DecimalStr || c.Name == uint256Str
return c.Name == intStr || c.Name == DecimalStr || c.Name == uint256Str || c.Name == unknownStr
}

// declared DataType constants.
Expand Down
3 changes: 3 additions & 0 deletions core/types/validation/keywords.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,7 @@ var reservedWords = map[string]struct{}{
"where": {},
"window": {},
"with": {},
// below are keywords that are not restricted by postgres, but are
// restricted by kwil
"excluded": {},
}
318 changes: 159 additions & 159 deletions internal/engine/execution/execution_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,165 +24,165 @@ func Test_Execution(t *testing.T) {
}

tests := []testCase{
// {
// name: "create database",
// fn: func(t *testing.T, eng *GlobalContext) {
// ctx := context.Background()
// db := newDB(false)

// err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid1",
// })
// assert.NoError(t, err)

// schema, err := eng.GetSchema(testdata.TestSchema.DBID())
// assert.NoError(t, err)

// assert.EqualValues(t, testdata.TestSchema, schema)
// },
// },
// {
// name: "drop database",
// fn: func(t *testing.T, eng *GlobalContext) {
// ctx := context.Background()
// db := newDB(false)

// err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid1",
// })
// assert.NoError(t, err)

// _, ok := db.dbs[testdata.TestSchema.DBID()]
// assert.True(t, ok)

// err = eng.DeleteDataset(ctx, db, testdata.TestSchema.DBID(), &common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid2",
// })
// assert.NoError(t, err)

// _, ok = db.dbs[testdata.TestSchema.DBID()]
// assert.False(t, ok)
// },
// },
// {
// name: "drop database with non-owner fails",
// fn: func(t *testing.T, eng *GlobalContext) {
// ctx := context.Background()
// db := newDB(false)

// err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid1",
// })
// assert.NoError(t, err)

// err = eng.DeleteDataset(ctx, db, testdata.TestSchema.DBID(), &common.TransactionData{
// Signer: []byte("not_owner"),
// Caller: "not_owner",
// TxID: "txid1",
// })
// assert.Error(t, err)
// },
// },
// {
// name: "drop non-existent database fails",
// fn: func(t *testing.T, eng *GlobalContext) {
// ctx := context.Background()
// db := newDB(false)

// err := eng.DeleteDataset(ctx, db, "not_a_real_db", &common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid2",
// })
// assert.Error(t, err)
// },
// },
// {
// name: "call an action",
// fn: func(t *testing.T, eng *GlobalContext) {
// ctx := context.Background()
// db := newDB(false)

// err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid1",
// })
// assert.NoError(t, err)

// _, err = eng.Procedure(ctx, db, &common.ExecutionData{
// Dataset: testdata.TestSchema.DBID(),
// Procedure: "create_user",
// Args: []any{1, "brennan", 22},
// TransactionData: common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid2",
// },
// })
// assert.NoError(t, err)
// },
// },
// {
// name: "call an action with invalid arguments",
// fn: func(t *testing.T, eng *GlobalContext) {
// ctx := context.Background()
// db := newDB(false)

// err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid1",
// })
// assert.NoError(t, err)

// _, err = eng.Procedure(ctx, db, &common.ExecutionData{
// Dataset: testdata.TestSchema.DBID(),
// Procedure: "create_user",
// Args: []any{1, "brennan"}, // missing age
// TransactionData: common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid2",
// },
// })
// assert.Error(t, err)
// },
// },
// {
// name: "call a recursive procedure",
// fn: func(t *testing.T, eng *GlobalContext) {
// ctx := context.Background()
// db := newDB(false)

// err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid1",
// })
// assert.NoError(t, err)

// _, err = eng.Procedure(ctx, db, &common.ExecutionData{
// Dataset: testdata.TestSchema.DBID(),
// Procedure: testdata.ActionRecursive.Name,
// Args: []any{"id000000", "asdfasdfasdfasdf", "bigbigbigbigbigbigbigbigbigbig"},
// TransactionData: common.TransactionData{
// Signer: testdata.TestSchema.Owner,
// Caller: string(testdata.TestSchema.Owner),
// TxID: "txid2",
// },
// })
// assert.ErrorIs(t, err, ErrMaxStackDepth)
// },
// },
{
name: "create database",
fn: func(t *testing.T, eng *GlobalContext) {
ctx := context.Background()
db := newDB(false)

err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid1",
})
assert.NoError(t, err)

schema, err := eng.GetSchema(testdata.TestSchema.DBID())
assert.NoError(t, err)

assert.EqualValues(t, testdata.TestSchema, schema)
},
},
{
name: "drop database",
fn: func(t *testing.T, eng *GlobalContext) {
ctx := context.Background()
db := newDB(false)

err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid1",
})
assert.NoError(t, err)

_, ok := db.dbs[testdata.TestSchema.DBID()]
assert.True(t, ok)

err = eng.DeleteDataset(ctx, db, testdata.TestSchema.DBID(), &common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid2",
})
assert.NoError(t, err)

_, ok = db.dbs[testdata.TestSchema.DBID()]
assert.False(t, ok)
},
},
{
name: "drop database with non-owner fails",
fn: func(t *testing.T, eng *GlobalContext) {
ctx := context.Background()
db := newDB(false)

err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid1",
})
assert.NoError(t, err)

err = eng.DeleteDataset(ctx, db, testdata.TestSchema.DBID(), &common.TransactionData{
Signer: []byte("not_owner"),
Caller: "not_owner",
TxID: "txid1",
})
assert.Error(t, err)
},
},
{
name: "drop non-existent database fails",
fn: func(t *testing.T, eng *GlobalContext) {
ctx := context.Background()
db := newDB(false)

err := eng.DeleteDataset(ctx, db, "not_a_real_db", &common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid2",
})
assert.Error(t, err)
},
},
{
name: "call an action",
fn: func(t *testing.T, eng *GlobalContext) {
ctx := context.Background()
db := newDB(false)

err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid1",
})
assert.NoError(t, err)

_, err = eng.Procedure(ctx, db, &common.ExecutionData{
Dataset: testdata.TestSchema.DBID(),
Procedure: "create_user",
Args: []any{1, "brennan", 22},
TransactionData: common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid2",
},
})
assert.NoError(t, err)
},
},
{
name: "call an action with invalid arguments",
fn: func(t *testing.T, eng *GlobalContext) {
ctx := context.Background()
db := newDB(false)

err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid1",
})
assert.NoError(t, err)

_, err = eng.Procedure(ctx, db, &common.ExecutionData{
Dataset: testdata.TestSchema.DBID(),
Procedure: "create_user",
Args: []any{1, "brennan"}, // missing age
TransactionData: common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid2",
},
})
assert.Error(t, err)
},
},
{
name: "call a recursive procedure",
fn: func(t *testing.T, eng *GlobalContext) {
ctx := context.Background()
db := newDB(false)

err := eng.CreateDataset(ctx, db, testdata.TestSchema, &common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid1",
})
assert.NoError(t, err)

_, err = eng.Procedure(ctx, db, &common.ExecutionData{
Dataset: testdata.TestSchema.DBID(),
Procedure: testdata.ActionRecursive.Name,
Args: []any{"id000000", "asdfasdfasdfasdf", "bigbigbigbigbigbigbigbigbigbig"},
TransactionData: common.TransactionData{
Signer: testdata.TestSchema.Owner,
Caller: string(testdata.TestSchema.Owner),
TxID: "txid2",
},
})
assert.ErrorIs(t, err, ErrMaxStackDepth)
},
},
{
name: "call a procedure that hits max call stack depth less directly",
fn: func(t *testing.T, eng *GlobalContext) {
Expand Down
2 changes: 1 addition & 1 deletion internal/engine/execution/procedure.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ func prepareActions(schema *types.Schema) ([]*preparedAction, error) {
for idx, action := range schema.Actions {
instructions := make([]instruction, 0)

actionStmt, err := generate.GenerateActionBody(action, schema)
actionStmt, err := generate.GenerateActionBody(action, schema, dbidSchema(schema.DBID()))
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion internal/engine/execution/queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ func createSchema(ctx context.Context, tx sql.TxMaker, schema *types.Schema, txi
// The function ensures that, whatever target procedure is chosen at runtime, that
// its input and output types are compatible with the expected types.
for _, proc := range schema.ForeignProcedures {
stmt, err := generate.GenerateForeignProcedure(proc)
stmt, err := generate.GenerateForeignProcedure(proc, schemaName)
if err != nil {
return err
}
Expand Down
Loading

0 comments on commit 5f3fd01

Please sign in to comment.