@@ -20,6 +20,65 @@ type queryResponseExpectation struct {
2020 values []string
2121}
2222
23+ func TestHandleQueryRelationFilenode (t * testing.T ) {
24+ queryHandler := initQueryHandlerForTest (t )
25+ for _ , query := range []string {
26+ `SELECT pg_relation_filenode('"audit"."changes"'::regclass)` ,
27+ `SELECT pg_catalog.pg_relation_filenode('"audit"."changes"'::pg_catalog.regclass)` ,
28+ `SELECT pg_relation_filenode(123::oid)` ,
29+ `SELECT pg_relation_filenode(NULL::regclass)` ,
30+ } {
31+ t .Run (query , func (t * testing.T ) {
32+ messages , err := queryHandler .HandleSimpleQuery (query )
33+ if err != nil {
34+ t .Fatal (err )
35+ }
36+ assertMessageTypes (t , messages , "*pgproto3.RowDescription" , "*pgproto3.DataRow" , "*pgproto3.CommandComplete" )
37+ description := messages [0 ].(* pgproto3.RowDescription )
38+ if string (description .Fields [0 ].Name ) != "pg_relation_filenode" || description .Fields [0 ].DataTypeOID != pgtype .Int8OID {
39+ t .Fatalf ("unexpected filenode description: %+v" , description .Fields [0 ])
40+ }
41+ if messages [1 ].(* pgproto3.DataRow ).Values [0 ] != nil {
42+ t .Fatal ("filenode must be SQL NULL" )
43+ }
44+ })
45+ }
46+ }
47+
48+ func TestHandlePreparedQueryRelationFilenode (t * testing.T ) {
49+ queryHandler := initQueryHandlerForTest (t )
50+ for _ , query := range []string {
51+ `SELECT pg_relation_filenode($1::regclass)` ,
52+ `SELECT pg_catalog.pg_relation_filenode($1::pg_catalog.regclass)` ,
53+ } {
54+ t .Run (query , func (t * testing.T ) {
55+ _ , statement , err := queryHandler .HandleParseQuery (& pgproto3.Parse {Query : query })
56+ if err != nil {
57+ t .Fatal (err )
58+ }
59+ defer statement .Statement .Close ()
60+ _ , statement , err = queryHandler .HandleBindQuery (& pgproto3.Bind {
61+ Parameters : [][]byte {[]byte (`"audit"."changes"` )},
62+ }, statement )
63+ if err != nil {
64+ t .Fatal (err )
65+ }
66+ _ , statement , err = queryHandler .HandleDescribeQuery (& pgproto3.Describe {ObjectType : 'P' }, statement )
67+ if err != nil {
68+ t .Fatal (err )
69+ }
70+ messages , err := queryHandler .HandleExecuteQuery (& pgproto3.Execute {}, statement )
71+ if err != nil {
72+ t .Fatal (err )
73+ }
74+ assertMessageTypes (t , messages , "*pgproto3.DataRow" , "*pgproto3.CommandComplete" )
75+ if messages [0 ].(* pgproto3.DataRow ).Values [0 ] != nil {
76+ t .Fatal ("filenode must be SQL NULL" )
77+ }
78+ })
79+ }
80+ }
81+
2382func TestHandleQueryExpandArray (t * testing.T ) {
2483 queryHandler := initQueryHandlerForTest (t )
2584 tests := []struct {
0 commit comments