From ad04ee504fe0ea1d42691f7603ab78acb8707819 Mon Sep 17 00:00:00 2001 From: Jason Fulghum Date: Mon, 29 Dec 2025 16:21:22 -0800 Subject: [PATCH] Bug fix for https://github.com/dolthub/doltgresql/issues/2145 --- postgres/parser/parser/sql.y | 8 +++- .../go/enginetest/doltgres_harness_test.go | 2 +- testing/go/types_test.go | 38 +++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/postgres/parser/parser/sql.y b/postgres/parser/parser/sql.y index 843a39672d..4ebca72521 100644 --- a/postgres/parser/parser/sql.y +++ b/postgres/parser/parser/sql.y @@ -717,7 +717,7 @@ func (u *sqlSymUnion) vacuumTableAndColsList() tree.VacuumTableAndColsList { %token BOOLEAN BOTH BOX2D BUFFER_USAGE_LIMIT BUNDLE BY BYPASSRLS %token CACHE CHAIN CALL CALLED CANCEL CANCELQUERY CANONICAL CASCADE CASCADED CASE CAST CATEGORY CBRT -%token CHANGEFEED CHAR CHARACTER CHARACTERISTICS CHECK CHECK_OPTION CLASS CLOSE +%token CHANGEFEED BPCHAR CHAR CHARACTER CHARACTERISTICS CHECK CHECK_OPTION CLASS CLOSE %token CLUSTER COALESCE COLLATABLE COLLATE COLLATION COLLATION_VERSION COLUMN COLUMNS COMBINEFUNC COMMENT COMMENTS %token BLOCK_COMMENT HINT %token COMMIT COMMITTED COMPACT COMPLETE COMPRESSION CONCAT CONCURRENTLY CONFIGURATION CONFIGURATIONS CONFIGURE @@ -12047,6 +12047,11 @@ character_base: { $$.val = types.String } +| BPCHAR + { + $$.val = types.MakeChar(0) + } + char_aliases: CHAR @@ -15115,6 +15120,7 @@ col_name_keyword: | BIT | BOOLEAN | BOX2D +| BPCHAR | CHAR | CHARACTER | CHARACTERISTICS diff --git a/testing/go/enginetest/doltgres_harness_test.go b/testing/go/enginetest/doltgres_harness_test.go index 1df39a140e..dcfb3d865a 100644 --- a/testing/go/enginetest/doltgres_harness_test.go +++ b/testing/go/enginetest/doltgres_harness_test.go @@ -865,7 +865,7 @@ func columns(rows pgx.Rows) (sql.Schema, []interface{}, error) { colVal := gosql.NullBool{} columnVals = append(columnVals, &colVal) schema = append(schema, &sql.Column{Name: field.Name, Type: gmstypes.Int8, Nullable: true}) - case uint32(oid.T_text), uint32(oid.T_varchar), uint32(oid.T_name), uint32(oid.T__text): + case uint32(oid.T_text), uint32(oid.T_varchar), uint32(oid.T_name), uint32(oid.T__text), uint32(oid.T_bpchar): colVal := gosql.NullString{} columnVals = append(columnVals, &colVal) schema = append(schema, &sql.Column{Name: field.Name, Type: gmstypes.LongText, Nullable: true}) diff --git a/testing/go/types_test.go b/testing/go/types_test.go index 35989c4f75..6014048317 100644 --- a/testing/go/types_test.go +++ b/testing/go/types_test.go @@ -349,6 +349,44 @@ var typesTests = []ScriptTest{ }, }, }, + { + // https://github.com/dolthub/doltgresql/issues/2145 + Name: "bpchar type", + Assertions: []ScriptTestAssertion{ + { + Query: "create table bptest1 (pk int primary key, c1 bpchar, c2 bpchar(12));", + Expected: nil, + }, + { + Query: "insert into bptest1 values (1, '1', '1');", + Expected: nil, + }, + { + Query: "select * from bptest1;", + Expected: []sql.Row{ + {1, "1", "1 "}, + }, + }, + { + Query: "SELECT '!'::bpchar;", + Expected: []sql.Row{ + {"!"}, + }, + }, + { + Query: "SELECT '!'::bpchar(1);", + Expected: []sql.Row{ + {"!"}, + }, + }, + { + Query: "SELECT '!'::bpchar(2);", + Expected: []sql.Row{ + {"! "}, + }, + }, + }, + }, { Name: "Character type", SetUpScript: []string{