diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 00000000..904c0597 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,39 @@ +name: Go + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.17 + + - name: Vendor + run: go mod vendor + + - name: Build + run: make + + - name: Install go-acc + run: go install github.com/ory/go-acc@latest + + - name: Test Genji + run: go-acc $(go list ./...) -- -mod vendor -race -timeout=2m + + - name: Test Genji CLI + run: cd ./cmd/genji && go test -race ./... && cd - + + - name: Test Badget Engine + run: cd ./engine/badgerengine && go test -race ./... && cd - + + - name: Upload Codecov + run: bash <(curl -s https://codecov.io/bash) diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index b3e299c9..00000000 --- a/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: go - -env: - - GO111MODULE=on - -go: - - "1.17.x" - - tip - -matrix: - allow_failures: - - go: tip - -script: - - go mod vendor - - make - - make gen - - go install github.com/ory/go-acc@latest - - go-acc $(go list ./...) -- -mod vendor -race -timeout=2m - - cd ./cmd/genji && go test -race ./... && cd - - - cd ./engine/badgerengine && go test -race ./... && cd - - -after_success: - - bash <(curl -s https://codecov.io/bash) diff --git a/internal/query/query.go b/internal/query/query.go index 6fcb625e..58cd0269 100644 --- a/internal/query/query.go +++ b/internal/query/query.go @@ -87,7 +87,7 @@ func (q *Query) Prepare(context *Context) error { } // Run executes all the statements in their own transaction and returns the last result. -func (q *Query) Run(context *Context) (*statement.Result, error) { +func (q Query) Run(context *Context) (*statement.Result, error) { var res statement.Result var err error @@ -109,7 +109,7 @@ func (q *Query) Run(context *Context) (*statement.Result, error) { res = statement.Result{} if qa, ok := stmt.(queryAlterer); ok { - err = qa.alterQuery(ctx, context.DB, q) + err = qa.alterQuery(ctx, context.DB, &q) if err != nil { if tx := context.GetTx(); tx != nil { tx.Rollback() diff --git a/internal/query/statement/insert_test.go b/internal/query/statement/insert_test.go index a544128d..1adf4abb 100644 --- a/internal/query/statement/insert_test.go +++ b/internal/query/statement/insert_test.go @@ -19,11 +19,11 @@ func TestInsertStmt(t *testing.T) { expected string params []interface{} }{ - {"Values / Positional Params", "INSERT INTO test (a, b, c) VALUES (?, 'e', ?)", false, `[{"pk()":1,"a":"d","b":"e","c":"f"}]`, []interface{}{"d", "f"}}, - {"Values / Named Params", "INSERT INTO test (a, b, c) VALUES ($d, 'e', $f)", false, `[{"pk()":1,"a":"d","b":"e","c":"f"}]`, []interface{}{sql.Named("f", "f"), sql.Named("d", "d")}}, + {"Values / Positional Params", "INSERT INTO test (a, b, c) VALUES (?, 'e', ?)", false, `[{"pk()":[1],"a":"d","b":"e","c":"f"}]`, []interface{}{"d", "f"}}, + {"Values / Named Params", "INSERT INTO test (a, b, c) VALUES ($d, 'e', $f)", false, `[{"pk()":[1],"a":"d","b":"e","c":"f"}]`, []interface{}{sql.Named("f", "f"), sql.Named("d", "d")}}, {"Values / Invalid params", "INSERT INTO test (a, b, c) VALUES ('d', ?)", true, "", []interface{}{'e'}}, - {"Documents / Named Params", "INSERT INTO test VALUES {a: $a, b: 2.3, c: $c}", false, `[{"pk()":1,"a":1,"b":2.3,"c":true}]`, []interface{}{sql.Named("c", true), sql.Named("a", 1)}}, - {"Documents / List ", "INSERT INTO test VALUES {a: [1, 2, 3]}", false, `[{"pk()":1,"a":[1,2,3]}]`, nil}, + {"Documents / Named Params", "INSERT INTO test VALUES {a: $a, b: 2.3, c: $c}", false, `[{"pk()":[1],"a":1,"b":2.3,"c":true}]`, []interface{}{sql.Named("c", true), sql.Named("a", 1)}}, + {"Documents / List ", "INSERT INTO test VALUES {a: [1, 2, 3]}", false, `[{"pk()":[1],"a":[1,2,3]}]`, nil}, {"Select / same table", "INSERT INTO test SELECT * FROM test", true, ``, nil}, } @@ -102,7 +102,7 @@ func TestInsertStmt(t *testing.T) { d, err := db.QueryDocument(`insert into test (a) VALUES (1) RETURNING *, pk(), a AS A`) assert.NoError(t, err) - testutil.RequireDocJSONEq(t, d, `{"a": 1, "pk()": 1, "A": 1}`) + testutil.RequireDocJSONEq(t, d, `{"a": 1, "pk()": [1], "A": 1}`) }) t.Run("ensure rollback", func(t *testing.T) { @@ -170,10 +170,10 @@ func TestInsertSelect(t *testing.T) { params []interface{} }{ {"Same table", `INSERT INTO foo SELECT * FROM foo`, true, ``, nil}, - {"No fields / No projection", `INSERT INTO foo SELECT * FROM bar`, false, `[{"pk()":1, "a":1, "b":10}]`, nil}, - {"No fields / Projection", `INSERT INTO foo SELECT a FROM bar`, false, `[{"pk()":1, "a":1}]`, nil}, - {"With fields / No Projection", `INSERT INTO foo (a, b) SELECT * FROM bar`, false, `[{"pk()":1, "a":1, "b":10}]`, nil}, - {"With fields / Projection", `INSERT INTO foo (c, d) SELECT a, b FROM bar`, false, `[{"pk()":1, "c":1, "d":10}]`, nil}, + {"No fields / No projection", `INSERT INTO foo SELECT * FROM bar`, false, `[{"pk()":[1], "a":1, "b":10}]`, nil}, + {"No fields / Projection", `INSERT INTO foo SELECT a FROM bar`, false, `[{"pk()":[1], "a":1}]`, nil}, + {"With fields / No Projection", `INSERT INTO foo (a, b) SELECT * FROM bar`, false, `[{"pk()":[1], "a":1, "b":10}]`, nil}, + {"With fields / Projection", `INSERT INTO foo (c, d) SELECT a, b FROM bar`, false, `[{"pk()":[1], "c":1, "d":10}]`, nil}, {"Too many fields / No Projection", `INSERT INTO foo (c) SELECT * FROM bar`, true, ``, nil}, {"Too many fields / Projection", `INSERT INTO foo (c, d) SELECT a, b, c FROM bar`, true, ``, nil}, {"Too few fields / No Projection", `INSERT INTO foo (c, d, e) SELECT * FROM bar`, true, ``, nil},