Merge pull request #560 from go-jet/cdb-cmt-test
Add cockroachdb table comments test.
This commit is contained in:
commit
7b56e1a621
5 changed files with 82 additions and 31 deletions
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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"}
|
||||||
testutils.AssertFileContent(t, modelDir+"/all_types.go", allTypesModelContent)
|
|
||||||
|
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+"/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)
|
||||||
testutils.AssertFileContent(t, tableDir+"/sample_ranges.go", sampleRangeTableContent)
|
|
||||||
|
if sourceIsPostgres() {
|
||||||
|
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}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue