Add cockroachdb table comments.

This commit is contained in:
go-jet 2026-02-03 12:43:37 +01:00
parent a8b1782130
commit 1fae6502b3
5 changed files with 82 additions and 31 deletions

View file

@ -24,13 +24,11 @@ import (
"github.com/go-jet/jet/v2/tests/testdata/results/common" "github.com/go-jet/jet/v2/tests/testdata/results/common"
) )
var AllTypesAllColumns = AllTypes.AllColumns.
Except(IntegerColumn("rowid")) // cockroachDB: exclude rowid column
func TestAllTypesSelect(t *testing.T) { func TestAllTypesSelect(t *testing.T) {
var dest []model.AllTypes var dest []model.AllTypes
err := AllTypes.SELECT(AllTypesAllColumns). err := SELECT(AllTypes.AllColumns).
FROM(AllTypes).
LIMIT(2). LIMIT(2).
Query(db, &dest) Query(db, &dest)
@ -42,7 +40,7 @@ func TestAllTypesSelect(t *testing.T) {
func TestAllTypesSelectJson(t *testing.T) { func TestAllTypesSelectJson(t *testing.T) {
stmt := SELECT_JSON_ARR( stmt := SELECT_JSON_ARR(
AllTypesAllColumns.Except( AllTypes.AllColumns.Except(
AllTypes.JSON, AllTypes.JSONPtr, AllTypes.JSON, AllTypes.JSONPtr,
AllTypes.Jsonb, AllTypes.JsonbPtr, AllTypes.Jsonb, AllTypes.JsonbPtr,
AllTypes.JsonbArray, AllTypes.JsonbArray,
@ -203,9 +201,14 @@ func TestMaterializedViewAllTypes(t *testing.T) {
func TestAllTypesInsertModel(t *testing.T) { func TestAllTypesInsertModel(t *testing.T) {
skipForPgxDriver(t) // pgx driver bug ERROR: date/time field value out of range: "0000-01-01 12:05:06Z" (SQLSTATE 22008) skipForPgxDriver(t) // pgx driver bug ERROR: date/time field value out of range: "0000-01-01 12:05:06Z" (SQLSTATE 22008)
query := AllTypes.INSERT(AllTypesAllColumns). row0 := testutils.DeepCopy(t, allTypesRow0)
MODEL(allTypesRow0). row0.Serial = 10
MODEL(&allTypesRow1). row1 := testutils.DeepCopy(t, allTypesRow1)
row1.Serial = 11
query := AllTypes.INSERT(AllTypes.AllColumns).
MODEL(row0).
MODEL(&row1).
RETURNING(AllTypes.AllColumns) RETURNING(AllTypes.AllColumns)
testutils.ExecuteInTxAndRollback(t, db, func(tx qrm.DB) { testutils.ExecuteInTxAndRollback(t, db, func(tx qrm.DB) {
@ -217,19 +220,19 @@ func TestAllTypesInsertModel(t *testing.T) {
return return
} }
require.Equal(t, len(dest), 2) require.Equal(t, len(dest), 2)
testutils.AssertDeepEqual(t, dest[0], allTypesRow0) testutils.AssertDeepEqual(t, dest[0], row0)
testutils.AssertDeepEqual(t, dest[1], allTypesRow1) testutils.AssertDeepEqual(t, dest[1], row1)
}) })
} }
func TestAllTypesInsertQuery(t *testing.T) { func TestAllTypesInsertQuery(t *testing.T) {
query := AllTypes.INSERT(AllTypesAllColumns). query := AllTypes.INSERT(AllTypes.MutableColumns).
QUERY( QUERY(
AllTypes. AllTypes.
SELECT(AllTypesAllColumns). SELECT(AllTypes.MutableColumns).
LIMIT(2), LIMIT(2),
). ).
RETURNING(AllTypesAllColumns) RETURNING(AllTypes.AllColumns)
testutils.ExecuteInTxAndRollback(t, db, func(tx qrm.DB) { testutils.ExecuteInTxAndRollback(t, db, func(tx qrm.DB) {
var dest []model.AllTypes var dest []model.AllTypes
@ -237,6 +240,8 @@ func TestAllTypesInsertQuery(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, len(dest), 2) require.Equal(t, len(dest), 2)
dest[0].Serial = allTypesRow0.Serial
dest[1].Serial = allTypesRow1.Serial
testutils.AssertDeepEqual(t, dest[0], allTypesRow0) testutils.AssertDeepEqual(t, dest[0], allTypesRow0)
testutils.AssertDeepEqual(t, dest[1], allTypesRow1) testutils.AssertDeepEqual(t, dest[1], allTypesRow1)
}) })
@ -319,7 +324,7 @@ WHERE all_types.bytea_ptr = $1::bytea;
} }
func TestAllTypesFromSubQuery(t *testing.T) { func TestAllTypesFromSubQuery(t *testing.T) {
subQuery := SELECT(AllTypesAllColumns). subQuery := SELECT(AllTypes.AllColumns).
FROM(AllTypes). FROM(AllTypes).
AsTable("allTypesSubQuery") AsTable("allTypesSubQuery")

View file

@ -9,6 +9,7 @@ import (
"reflect" "reflect"
"regexp" "regexp"
"strconv" "strconv"
"strings"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -752,8 +753,6 @@ func UseSchema(schema string) {
` `
func TestGeneratedAllTypesSQLBuilderFiles(t *testing.T) { func TestGeneratedAllTypesSQLBuilderFiles(t *testing.T) {
skipForCockroachDB(t) // because of rowid column
enumDir := filepath.Join(testRoot, "/.gentestdata/jetdb/test_sample/enum/") enumDir := filepath.Join(testRoot, "/.gentestdata/jetdb/test_sample/enum/")
modelDir := filepath.Join(testRoot, "/.gentestdata/jetdb/test_sample/model/") modelDir := filepath.Join(testRoot, "/.gentestdata/jetdb/test_sample/model/")
tableDir := filepath.Join(testRoot, "/.gentestdata/jetdb/test_sample/table/") tableDir := filepath.Join(testRoot, "/.gentestdata/jetdb/test_sample/table/")
@ -761,19 +760,56 @@ func TestGeneratedAllTypesSQLBuilderFiles(t *testing.T) {
testutils.AssertFileNamesEqual(t, enumDir, "mood.go", "level.go") testutils.AssertFileNamesEqual(t, enumDir, "mood.go", "level.go")
testutils.AssertFileContent(t, enumDir+"/mood.go", moodEnumContent) testutils.AssertFileContent(t, enumDir+"/mood.go", moodEnumContent)
testutils.AssertFileContent(t, enumDir+"/level.go", levelEnumContent)
testutils.AssertFileNamesEqual(t, modelDir, "all_types.go", "all_types_view.go", "employee.go", "link.go", if sourceIsPostgres() {
testutils.AssertFileContent(t, enumDir+"/level.go", levelEnumContent)
}
var cockroachModels = []string{"all_types.go", "all_types_view.go", "employee.go", "link.go",
"mood.go", "person.go", "person_phone.go", "weird_names_table.go", "level.go", "user.go", "floats.go", "people.go", "mood.go", "person.go", "person_phone.go", "weird_names_table.go", "level.go", "user.go", "floats.go", "people.go",
"components.go", "vulnerabilities.go", "all_types_materialized_view.go", "sample_ranges.go", "sample_arrays.go") "components.go", "vulnerabilities.go", "all_types_materialized_view.go", "sample_arrays.go"}
var postgresModels = append(cockroachModels, "sample_ranges.go")
if sourceIsCockroachDB() {
testutils.AssertFileNamesEqual(t, modelDir, cockroachModels...)
} else {
testutils.AssertFileNamesEqual(t, modelDir, postgresModels...)
}
if sourceIsCockroachDB() {
enumFileData, err := os.ReadFile(modelDir + "/all_types.go") // #nosec G304
require.NoError(t, err)
r := strings.NewReplacer(
"Smallserial int64", "Smallserial int16",
"Serial int64", "Serial int32",
)
require.Equal(t, "\n"+r.Replace(string(enumFileData)), allTypesModelContent)
} else {
testutils.AssertFileContent(t, modelDir+"/all_types.go", allTypesModelContent) testutils.AssertFileContent(t, modelDir+"/all_types.go", allTypesModelContent)
}
testutils.AssertFileContent(t, modelDir+"/link.go", linkModelContent) testutils.AssertFileContent(t, modelDir+"/link.go", linkModelContent)
testutils.AssertFileNamesEqual(t, tableDir, "all_types.go", "employee.go", "link.go", var cdbSqlBuilders = []string{"all_types.go", "employee.go", "link.go",
"person.go", "person_phone.go", "weird_names_table.go", "user.go", "floats.go", "people.go", "table_use_schema.go", "person.go", "person_phone.go", "weird_names_table.go", "user.go", "floats.go", "people.go", "table_use_schema.go",
"components.go", "vulnerabilities.go", "sample_ranges.go", "sample_arrays.go") "components.go", "vulnerabilities.go", "sample_arrays.go"}
var postgresSqlBuilders = append(cdbSqlBuilders, "sample_ranges.go")
if sourceIsCockroachDB() {
testutils.AssertFileNamesEqual(t, tableDir, cdbSqlBuilders...)
} else {
testutils.AssertFileNamesEqual(t, tableDir, postgresSqlBuilders...)
}
testutils.AssertFileContent(t, tableDir+"/all_types.go", allTypesTableContent) testutils.AssertFileContent(t, tableDir+"/all_types.go", allTypesTableContent)
if sourceIsPostgres() {
testutils.AssertFileContent(t, tableDir+"/sample_ranges.go", sampleRangeTableContent) testutils.AssertFileContent(t, tableDir+"/sample_ranges.go", sampleRangeTableContent)
}
testutils.AssertFileContent(t, tableDir+"/link.go", linkTableContent) testutils.AssertFileContent(t, tableDir+"/link.go", linkTableContent)
@ -864,7 +900,7 @@ type AllTypes struct {
DoublePrecisionPtr *float64 DoublePrecisionPtr *float64
DoublePrecision float64 DoublePrecision float64
Smallserial int16 Smallserial int16
Serial int32 Serial int32 ` + "`sql:\"primary_key\"`" + `
Bigserial int64 Bigserial int64
VarCharPtr *string VarCharPtr *string
VarChar string VarChar string
@ -1122,7 +1158,7 @@ func newAllTypesTableImpl(schemaName, tableName, alias string) allTypesTable {
MoodPtrColumn = postgres.StringColumn("mood_ptr") MoodPtrColumn = postgres.StringColumn("mood_ptr")
MoodColumn = postgres.StringColumn("mood") MoodColumn = postgres.StringColumn("mood")
allColumns = postgres.ColumnList{SmallIntPtrColumn, SmallIntColumn, IntegerPtrColumn, IntegerColumn, BigIntPtrColumn, BigIntColumn, DecimalPtrColumn, DecimalColumn, NumericPtrColumn, NumericColumn, RealPtrColumn, RealColumn, DoublePrecisionPtrColumn, DoublePrecisionColumn, SmallserialColumn, SerialColumn, BigserialColumn, VarCharPtrColumn, VarCharColumn, CharPtrColumn, CharColumn, TextPtrColumn, TextColumn, ByteaPtrColumn, ByteaColumn, TimestampzPtrColumn, TimestampzColumn, TimestampPtrColumn, TimestampColumn, DatePtrColumn, DateColumn, TimezPtrColumn, TimezColumn, TimePtrColumn, TimeColumn, IntervalPtrColumn, IntervalColumn, BooleanPtrColumn, BooleanColumn, PointPtrColumn, BitPtrColumn, BitColumn, BitVaryingPtrColumn, BitVaryingColumn, TsvectorPtrColumn, TsvectorColumn, UUIDPtrColumn, UUIDColumn, XMLPtrColumn, XMLColumn, JSONPtrColumn, JSONColumn, JsonbPtrColumn, JsonbColumn, IntegerArrayPtrColumn, IntegerArrayColumn, TextArrayPtrColumn, TextArrayColumn, JsonbArrayColumn, TextMultiDimArrayPtrColumn, TextMultiDimArrayColumn, MoodPtrColumn, MoodColumn} allColumns = postgres.ColumnList{SmallIntPtrColumn, SmallIntColumn, IntegerPtrColumn, IntegerColumn, BigIntPtrColumn, BigIntColumn, DecimalPtrColumn, DecimalColumn, NumericPtrColumn, NumericColumn, RealPtrColumn, RealColumn, DoublePrecisionPtrColumn, DoublePrecisionColumn, SmallserialColumn, SerialColumn, BigserialColumn, VarCharPtrColumn, VarCharColumn, CharPtrColumn, CharColumn, TextPtrColumn, TextColumn, ByteaPtrColumn, ByteaColumn, TimestampzPtrColumn, TimestampzColumn, TimestampPtrColumn, TimestampColumn, DatePtrColumn, DateColumn, TimezPtrColumn, TimezColumn, TimePtrColumn, TimeColumn, IntervalPtrColumn, IntervalColumn, BooleanPtrColumn, BooleanColumn, PointPtrColumn, BitPtrColumn, BitColumn, BitVaryingPtrColumn, BitVaryingColumn, TsvectorPtrColumn, TsvectorColumn, UUIDPtrColumn, UUIDColumn, XMLPtrColumn, XMLColumn, JSONPtrColumn, JSONColumn, JsonbPtrColumn, JsonbColumn, IntegerArrayPtrColumn, IntegerArrayColumn, TextArrayPtrColumn, TextArrayColumn, JsonbArrayColumn, TextMultiDimArrayPtrColumn, TextMultiDimArrayColumn, MoodPtrColumn, MoodColumn}
mutableColumns = postgres.ColumnList{SmallIntPtrColumn, SmallIntColumn, IntegerPtrColumn, IntegerColumn, BigIntPtrColumn, BigIntColumn, DecimalPtrColumn, DecimalColumn, NumericPtrColumn, NumericColumn, RealPtrColumn, RealColumn, DoublePrecisionPtrColumn, DoublePrecisionColumn, SmallserialColumn, SerialColumn, BigserialColumn, VarCharPtrColumn, VarCharColumn, CharPtrColumn, CharColumn, TextPtrColumn, TextColumn, ByteaPtrColumn, ByteaColumn, TimestampzPtrColumn, TimestampzColumn, TimestampPtrColumn, TimestampColumn, DatePtrColumn, DateColumn, TimezPtrColumn, TimezColumn, TimePtrColumn, TimeColumn, IntervalPtrColumn, IntervalColumn, BooleanPtrColumn, BooleanColumn, PointPtrColumn, BitPtrColumn, BitColumn, BitVaryingPtrColumn, BitVaryingColumn, TsvectorPtrColumn, TsvectorColumn, UUIDPtrColumn, UUIDColumn, XMLPtrColumn, XMLColumn, JSONPtrColumn, JSONColumn, JsonbPtrColumn, JsonbColumn, IntegerArrayPtrColumn, IntegerArrayColumn, TextArrayPtrColumn, TextArrayColumn, JsonbArrayColumn, TextMultiDimArrayPtrColumn, TextMultiDimArrayColumn, MoodPtrColumn, MoodColumn} mutableColumns = postgres.ColumnList{SmallIntPtrColumn, SmallIntColumn, IntegerPtrColumn, IntegerColumn, BigIntPtrColumn, BigIntColumn, DecimalPtrColumn, DecimalColumn, NumericPtrColumn, NumericColumn, RealPtrColumn, RealColumn, DoublePrecisionPtrColumn, DoublePrecisionColumn, SmallserialColumn, BigserialColumn, VarCharPtrColumn, VarCharColumn, CharPtrColumn, CharColumn, TextPtrColumn, TextColumn, ByteaPtrColumn, ByteaColumn, TimestampzPtrColumn, TimestampzColumn, TimestampPtrColumn, TimestampColumn, DatePtrColumn, DateColumn, TimezPtrColumn, TimezColumn, TimePtrColumn, TimeColumn, IntervalPtrColumn, IntervalColumn, BooleanPtrColumn, BooleanColumn, PointPtrColumn, BitPtrColumn, BitColumn, BitVaryingPtrColumn, BitVaryingColumn, TsvectorPtrColumn, TsvectorColumn, UUIDPtrColumn, UUIDColumn, XMLPtrColumn, XMLColumn, JSONPtrColumn, JSONColumn, JsonbPtrColumn, JsonbColumn, IntegerArrayPtrColumn, IntegerArrayColumn, TextArrayPtrColumn, TextArrayColumn, JsonbArrayColumn, TextMultiDimArrayPtrColumn, TextMultiDimArrayColumn, MoodPtrColumn, MoodColumn}
defaultColumns = postgres.ColumnList{SmallIntColumn, IntegerColumn, BigIntColumn, DecimalColumn, NumericColumn, RealColumn, DoublePrecisionColumn, SmallserialColumn, SerialColumn, BigserialColumn, VarCharColumn, CharColumn, TextColumn, ByteaColumn, TimestampzColumn, TimestampColumn, DateColumn, TimezColumn, TimeColumn, IntervalColumn, BooleanColumn, BitColumn, BitVaryingColumn, TsvectorColumn, UUIDColumn, XMLColumn, JSONColumn, JsonbColumn, IntegerArrayColumn, TextArrayColumn, JsonbArrayColumn, TextMultiDimArrayColumn, MoodColumn} defaultColumns = postgres.ColumnList{SmallIntColumn, IntegerColumn, BigIntColumn, DecimalColumn, NumericColumn, RealColumn, DoublePrecisionColumn, SmallserialColumn, SerialColumn, BigserialColumn, VarCharColumn, CharColumn, TextColumn, ByteaColumn, TimestampzColumn, TimestampColumn, DateColumn, TimezColumn, TimeColumn, IntervalColumn, BooleanColumn, BitColumn, BitVaryingColumn, TsvectorColumn, UUIDColumn, XMLColumn, JSONColumn, JsonbColumn, IntegerArrayColumn, TextArrayColumn, JsonbArrayColumn, TextMultiDimArrayColumn, MoodColumn}
) )

View file

@ -5,13 +5,14 @@ import (
"database/sql" "database/sql"
"encoding/json" "encoding/json"
"fmt" "fmt"
"os"
"runtime"
"testing"
"github.com/go-jet/jet/v2/qrm" "github.com/go-jet/jet/v2/qrm"
"github.com/go-jet/jet/v2/stmtcache" "github.com/go-jet/jet/v2/stmtcache"
"github.com/go-jet/jet/v2/tests/internal/utils/repo" "github.com/go-jet/jet/v2/tests/internal/utils/repo"
"github.com/jackc/pgx/v4/stdlib" "github.com/jackc/pgx/v4/stdlib"
"os"
"runtime"
"testing"
"github.com/go-jet/jet/v2/postgres" "github.com/go-jet/jet/v2/postgres"
"github.com/go-jet/jet/v2/tests/dbconfig" "github.com/go-jet/jet/v2/tests/dbconfig"
@ -31,6 +32,7 @@ var source string
var withStatementCaching bool var withStatementCaching bool
const CockroachDB = "COCKROACH_DB" const CockroachDB = "COCKROACH_DB"
const Postgres = "POSTGRESQL_DB"
func init() { func init() {
source = os.Getenv("PG_SOURCE") source = os.Getenv("PG_SOURCE")
@ -42,6 +44,10 @@ func sourceIsCockroachDB() bool {
return source == CockroachDB return source == CockroachDB
} }
func sourceIsPostgres() bool {
return source == Postgres
}
func skipForCockroachDB(t *testing.T) { func skipForCockroachDB(t *testing.T) {
if sourceIsCockroachDB() { if sourceIsCockroachDB() {
t.SkipNow() t.SkipNow()

View file

@ -70,7 +70,9 @@ var allTypesJSON = `
"Text": "text", "Text": "text",
"TextPtr": "text-ptr", "TextPtr": "text-ptr",
"Blob": "YmxvYjE=", "Blob": "YmxvYjE=",
"BlobPtr": "YmxvYi1wdHI=" "BlobPtr": "YmxvYi1wdHI=",
"JSON": "{\"key1\": \"value1\", \"key2\": \"value2\"}",
"JSONPtr": "{\"key1\": \"value1\", \"key2\": \"value2\"}"
}, },
{ {
"Boolean": false, "Boolean": false,
@ -110,7 +112,9 @@ var allTypesJSON = `
"Text": "text", "Text": "text",
"TextPtr": null, "TextPtr": null,
"Blob": "YmxvYjI=", "Blob": "YmxvYjI=",
"BlobPtr": null "BlobPtr": null,
"JSON": "{\"key1\": \"value1\", \"key2\": \"value2\"}",
"JSONPtr": null
} }
] ]
` `

@ -1 +1 @@
Subproject commit 0387785d9e9ceacba2247d477181436f27bf2068 Subproject commit 5003c4883cfcf797a74fe0ed596ad4873908fe3a