Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
35c486e
Updated testing environment.
simukka Nov 6, 2025
5a792ea
Working connection.
simukka Nov 6, 2025
f2e07a9
Updated fixture to use pgx. Simplified how we introspect the DSN to d…
simukka Dec 3, 2025
f74f21c
Wrote initial sqlcode migration for postgres.
simukka Dec 3, 2025
396e427
Add security definer role.
simukka Dec 3, 2025
201a66c
[wip] working through changes for EnsureUploaded to support postgresql.
simukka Dec 3, 2025
108f651
Working EnsureUpload!
simukka Dec 4, 2025
b7b3b75
[wip] update parser and scanner
simukka Dec 5, 2025
dd9b48e
Fixed issue with Preprocess. Passing pgsql tests.
simukka Dec 9, 2025
9cbbe00
Updated GO workflow to test both drivers.
simukka Dec 9, 2025
f7fe006
Fixed typo in GH workflow.
simukka Dec 9, 2025
365cffa
Updated Dockerfile
simukka Dec 9, 2025
b3b3d13
Use build tags to exclude examples from bulid & test
simukka Dec 9, 2025
6fb9ea5
Exclude example test
simukka Dec 9, 2025
c587c0f
Fixed failing test.
simukka Dec 9, 2025
1ebaa6f
Moved Document structs to a separate file for better organization.
simukka Dec 11, 2025
b3419f2
Updated go-mssql depedency to use microsoft fork. DropAndUpload now s…
simukka Dec 11, 2025
e51b277
Initial unit tests for T-SQL syntax parsing.
simukka Dec 11, 2025
e14a783
Refactored to use a Document interface.
simukka Dec 11, 2025
cd7f93f
Renamed the existing Document struct to be specific for T-SQL.
simukka Dec 11, 2025
37da069
Created initial PGSqlDocument for PostgreSQL.
simukka Dec 11, 2025
0ceb98b
Updated unit test.
simukka Dec 11, 2025
286f976
Updated tests.
simukka Dec 11, 2025
910279d
Simplified Document interface. Created Pragma struct.
simukka Dec 11, 2025
fb8fffb
[wip] pgsql document parsing
simukka Dec 11, 2025
5996755
Simplify the interfaces for parsing a SQL document.
simukka Dec 16, 2025
fb55399
Refactored pgsql document to use node parser.
simukka Dec 16, 2025
9eacf7e
[wip]
simukka Dec 18, 2025
606925c
cleaning up
simukka Jan 3, 2026
96d2f13
Fixed batch parser that was failing the smoke test.
simukka Jan 3, 2026
3d37c7f
cleanin g up tests
simukka Jan 7, 2026
98f3a9e
Updated tests
simukka Jan 7, 2026
3a14336
Cleanup
simukka Jan 8, 2026
c7c00fc
Cleaning up.
simukka Jan 8, 2026
4f32d19
Removed pgsql helpers.
simukka Jan 8, 2026
006af2c
Fixed failing test.
simukka Jan 8, 2026
c7bf9eb
Use a defined type for the CreateType.
simukka Jan 8, 2026
b71c781
Update ParseString helper method.
simukka Jan 8, 2026
b58d3be
v2
simukka Jan 11, 2026
9bdf4e7
fixed dependencies.
simukka Jan 11, 2026
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
17 changes: 7 additions & 10 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go

name: go-querysql-test
name: sqlcode

on:
pull_request:
Expand All @@ -11,19 +11,16 @@ jobs:

build:
runs-on: ubuntu-latest
env:
SQLSERVER_DSN: "sqlserver://127.0.0.1:1433?database=master&user id=sa&password=VippsPw1"
strategy:
matrix:
driver: ['mssql']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'

- name: Start db
run: docker compose -f docker-compose.test.yml up -d
go-version: '1.25'

- name: Test
# Skip the example folder because it has examples of what-not-to-do
run: go test -v $(go list ./... | grep -v './example')
run: docker compose -f docker-compose.${{ matrix.driver }}.yml run test
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
test: test_mssql

test_mssql:
docker compose --progress plain -f docker-compose.mssql.yml run test
6 changes: 4 additions & 2 deletions cli/cmd/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ package cmd
import (
"errors"
"fmt"

mssql "github.com/microsoft/go-mssqldb"
"github.com/spf13/cobra"
"github.com/vippsas/sqlcode"
"github.com/vippsas/sqlcode/v2"
)

var (
Expand All @@ -23,7 +25,7 @@ var (
return err
}

preprocessed, err := sqlcode.Preprocess(d.CodeBase, schemasuffix)
preprocessed, err := sqlcode.Preprocess(d.CodeBase, schemasuffix, &mssql.Driver{})
if err != nil {
return err
}
Expand Down
11 changes: 6 additions & 5 deletions cli/cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@ import (
"database/sql"
"errors"
"fmt"
mssql "github.com/denisenkom/go-mssqldb"
"github.com/denisenkom/go-mssqldb/azuread"
"golang.org/x/net/proxy"
"io/ioutil"
"os"
"path"
"strings"

_ "github.com/denisenkom/go-mssqldb/azuread"
"github.com/denisenkom/go-mssqldb/msdsn"
mssql "github.com/microsoft/go-mssqldb"
"github.com/microsoft/go-mssqldb/azuread"
"golang.org/x/net/proxy"

_ "github.com/microsoft/go-mssqldb/azuread"
"github.com/microsoft/go-mssqldb/msdsn"
"github.com/sirupsen/logrus"
"gopkg.in/yaml.v3"
)
Expand Down
8 changes: 4 additions & 4 deletions cli/cmd/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@ var (
if err != nil {
return err
}
if len(d.CodeBase.Creates) == 0 && len(d.CodeBase.Declares) == 0 {
if d.CodeBase.Empty() {
fmt.Println("No SQL code found in given paths")
}
if len(d.CodeBase.Errors) > 0 {
if d.CodeBase.HasErrors() {
fmt.Println("Errors:")
for _, e := range d.CodeBase.Errors {
for _, e := range d.CodeBase.Errors() {
fmt.Printf("%s:%d:%d: %s\n", e.Pos.File, e.Pos.Line, e.Pos.Line, e.Message)
}
return nil
}
fmt.Println("declare")
for i, c := range d.CodeBase.Declares {
for i, c := range d.CodeBase.Declares() {
var prefix string
if i == 0 {
prefix = " "
Expand Down
10 changes: 5 additions & 5 deletions cli/cmd/dep.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"os"

"github.com/spf13/cobra"
"github.com/vippsas/sqlcode"
"github.com/vippsas/sqlcode/v2"
)

func dep(partialParseResults bool) (d sqlcode.Deployable, err error) {
Expand Down Expand Up @@ -36,16 +36,16 @@ var (
fmt.Println()
err = nil
}
if len(d.CodeBase.Creates) == 0 && len(d.CodeBase.Declares) == 0 {
if d.CodeBase.Empty() {
fmt.Println("No SQL code found in given paths")
}
if len(d.CodeBase.Errors) > 0 {
if d.CodeBase.HasErrors() {
fmt.Println("Errors:")
for _, e := range d.CodeBase.Errors {
for _, e := range d.CodeBase.Errors() {
fmt.Printf("%s:%d:%d: %s\n", e.Pos.File, e.Pos.Line, e.Pos.Line, e.Message)
}
}
for _, c := range d.CodeBase.Creates {
for _, c := range d.CodeBase.Creates() {
fmt.Println(c.QuotedName.String() + ":")
if len(c.DependsOn) > 0 {
fmt.Println(" Uses:")
Expand Down
3 changes: 2 additions & 1 deletion cli/main.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package main

import (
"github.com/vippsas/sqlcode/cli/cmd"
"math/rand"
"os"
"time"

"github.com/vippsas/sqlcode/v2/cli/cmd"
)

func main() {
Expand Down
2 changes: 2 additions & 0 deletions dbintf.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package sqlcode
import (
"context"
"database/sql"
"database/sql/driver"
)

type DB interface {
Expand All @@ -11,6 +12,7 @@ type DB interface {
QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row
Conn(ctx context.Context) (*sql.Conn, error)
BeginTx(ctx context.Context, txOptions *sql.TxOptions) (*sql.Tx, error)
Driver() driver.Driver
}

var _ DB = &sql.DB{}
37 changes: 34 additions & 3 deletions dbops.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,26 @@ package sqlcode
import (
"context"
"database/sql"

"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/stdlib"
mssql "github.com/microsoft/go-mssqldb"
)

func Exists(ctx context.Context, dbc DB, schemasuffix string) (bool, error) {
var schemaID int
err := dbc.QueryRowContext(ctx, `select isnull(schema_id(@p1), 0)`, SchemaName(schemasuffix)).Scan(&schemaID)

driver := dbc.Driver()
var qs string

if _, ok := driver.(*mssql.Driver); ok {
qs = `select isnull(schema_id(@p1), 0)`
}
if _, ok := driver.(*stdlib.Driver); ok {
qs = `select coalesce((select oid from pg_namespace where nspname = $1),0)`
}

err := dbc.QueryRowContext(ctx, qs, SchemaName(schemasuffix)).Scan(&schemaID)
if err != nil {
return false, err
}
Expand All @@ -19,8 +34,24 @@ func Drop(ctx context.Context, dbc DB, schemasuffix string) error {
if err != nil {
return err
}
_, err = tx.ExecContext(ctx, `sqlcode.DropCodeSchema`,
sql.Named("schemasuffix", schemasuffix))

var qs string
var arg = []interface{}{}
driver := dbc.Driver()

if _, ok := driver.(*mssql.Driver); ok {
qs = `sqlcode.DropCodeSchema`
arg = []interface{}{sql.Named("schemasuffix", schemasuffix)}
}

if _, ok := dbc.Driver().(*stdlib.Driver); ok {
qs = `call sqlcode.dropcodeschema(@schemasuffix)`
arg = []interface{}{
pgx.NamedArgs{"schemasuffix": schemasuffix},
}
}

_, err = tx.ExecContext(ctx, qs, arg...)
if err != nil {
_ = tx.Rollback()
return err
Expand Down
Loading
Loading