@@ -38,7 +38,7 @@ func TestSamples(t *testing.T) {
3838 databaseID := "test-database"
3939 databaseName := fmt .Sprintf ("projects/%s/instances/%s/databases/%s" , projectID , instanceID , databaseID )
4040
41- emulator , err := startEmulator (projectID , instanceID , databaseID )
41+ emulator , err := startEmulator (projectID , instanceID , databaseID , adminpb . DatabaseDialect_GOOGLE_STANDARD_SQL )
4242 if err != nil {
4343 if emulator != nil {
4444 emulator .Terminate (context .Background ())
@@ -69,6 +69,43 @@ func TestSamples(t *testing.T) {
6969 testSample (t , ctx , & b , databaseName , samples .PartitionedDml , "PDML" , "Updated at least 3 albums\n " )
7070}
7171
72+ func TestPostgreSQLSamples (t * testing.T ) {
73+ projectID := "emulator-project"
74+ instanceID := "test-instance"
75+ databaseID := "test-database"
76+ databaseName := fmt .Sprintf ("projects/%s/instances/%s/databases/%s" , projectID , instanceID , databaseID )
77+
78+ emulator , err := startEmulator (projectID , instanceID , databaseID , adminpb .DatabaseDialect_POSTGRESQL )
79+ if err != nil {
80+ if emulator != nil {
81+ emulator .Terminate (context .Background ())
82+ }
83+ t .Fatalf ("failed to start emulator: %v" , err )
84+ }
85+ defer emulator .Terminate (context .Background ())
86+
87+ ctx := context .Background ()
88+ var b bytes.Buffer
89+
90+ testSample (t , ctx , & b , databaseName , samples .CreateTablesPostgreSQL , "CreateTablesPostgreSQL" , fmt .Sprintf ("Created singers & albums tables in database: [%s]\n " , databaseName ))
91+ testSample (t , ctx , & b , databaseName , samples .CreateConnectionPostgreSQL , "CreateConnectionPostgreSQL" , "Greeting from Spanner PostgreSQL: Hello world!\n " )
92+ testSample (t , ctx , & b , databaseName , samples .WriteDataWithDmlPostgreSQL , "WriteDataWithDmlPostgreSQL" , "4 records inserted\n " )
93+ testSample (t , ctx , & b , databaseName , samples .WriteDataWithDmlBatchPostgreSQL , "WriteDataWithDmlBatchPostgreSQL" , "3 records inserted\n " )
94+ testSample (t , ctx , & b , databaseName , samples .WriteDataWithMutationsPostgreSQL , "WriteDataWithMutationsPostgreSQL" , "Inserted 10 rows\n " )
95+ testSample (t , ctx , & b , databaseName , samples .QueryDataPostgreSQL , "QueryDataPostgreSQL" , "1 1 Total Junk\n 1 2 Go, Go, Go\n 2 1 Green\n 2 2 Forever Hold Your Peace\n 2 3 Terrified\n " )
96+ testSample (t , ctx , & b , databaseName , samples .QueryDataWithParameterPostgreSQL , "QueryDataWithParameterPostgreSQL" , "12 Melissa Garcia\n " )
97+ testSample (t , ctx , & b , databaseName , samples .QueryDataWithTimeoutPostgreSQL , "QueryDataWithTimeoutPostgreSQL" , "" )
98+ testSample (t , ctx , & b , databaseName , samples .AddColumnPostgreSQL , "AddColumnPostgreSQL" , "Added marketing_budget column\n " )
99+ testSample (t , ctx , & b , databaseName , samples .DdlBatchPostgreSQL , "DdlBatchPostgreSQL" , "Added venues and concerts tables\n " )
100+ testSample (t , ctx , & b , databaseName , samples .UpdateDataWithMutationsPostgreSQL , "UpdateDataWithMutationsPostgreSQL" , "Updated 2 albums\n " )
101+ testSample (t , ctx , & b , databaseName , samples .QueryNewColumnPostgreSQL , "QueryNewColumnPostgreSQL" , "1 1 100000\n 1 2 null\n 2 1 null\n 2 2 500000\n 2 3 null\n " )
102+ testSample (t , ctx , & b , databaseName , samples .WriteWithTransactionUsingDmlPostgreSQL , "WriteWithTransactionUsingDmlPostgreSQL" , "Transferred marketing budget from Album 2 to Album 1\n " )
103+ testSample (t , ctx , & b , databaseName , samples .TagsPostgreSQL , "TagsPostgreSQL" , "Reduced marketing budget\n " )
104+ testSample (t , ctx , & b , databaseName , samples .ReadOnlyTransactionPostgreSQL , "ReadOnlyTransactionPostgreSQL" , "1 1 Total Junk\n 1 2 Go, Go, Go\n 2 1 Green\n 2 2 Forever Hold Your Peace\n 2 3 Terrified\n 2 2 Forever Hold Your Peace\n 1 2 Go, Go, Go\n 2 1 Green\n 2 3 Terrified\n 1 1 Total Junk\n " )
105+ testSample (t , ctx , & b , databaseName , samples .DataBoostPostgreSQL , "DataBoostPostgreSQL" , "1 Marc Richards\n 2 Catalina Smith\n 3 Alice Trentor\n 4 Lea Martin\n 5 David Lomond\n 12 Melissa Garcia\n 13 Russel Morales\n 14 Jacqueline Long\n 15 Dylan Shaw\n 16 Sarah Wilson\n 17 Ethan Miller\n 18 Maya Patel\n " )
106+ testSample (t , ctx , & b , databaseName , samples .PartitionedDmlPostgreSQL , "PDMLPostgreSQL" , "Updated at least 3 albums\n " )
107+ }
108+
72109func testSample (t * testing.T , ctx context.Context , b * bytes.Buffer , databaseName string , sample func (ctx context.Context , w io.Writer , databaseName string ) error , sampleName , want string ) {
73110 if err := sample (ctx , b , databaseName ); err != nil {
74111 t .Fatalf ("failed to run %s: %v" , sampleName , err )
@@ -79,7 +116,7 @@ func testSample(t *testing.T, ctx context.Context, b *bytes.Buffer, databaseName
79116 b .Reset ()
80117}
81118
82- func startEmulator (projectID , instanceID , databaseID string ) (testcontainers.Container , error ) {
119+ func startEmulator (projectID , instanceID , databaseID string , dialect adminpb. DatabaseDialect ) (testcontainers.Container , error ) {
83120 ctx := context .Background ()
84121 req := testcontainers.ContainerRequest {
85122 AlwaysPullImage : true ,
@@ -95,7 +132,7 @@ func startEmulator(projectID, instanceID, databaseID string) (testcontainers.Con
95132 Started : true ,
96133 })
97134 if err != nil {
98- return emulator , fmt .Errorf ("failed to start PGAdapter : %v" , err )
135+ return emulator , fmt .Errorf ("failed to start emulator : %v" , err )
99136 }
100137 host , err := emulator .Host (ctx )
101138 if err != nil {
@@ -113,7 +150,7 @@ func startEmulator(projectID, instanceID, databaseID string) (testcontainers.Con
113150 if err := createInstance (projectID , instanceID ); err != nil {
114151 return emulator , fmt .Errorf ("failed to create instance: %v" , err )
115152 }
116- if err := createDatabase (projectID , instanceID , databaseID ); err != nil {
153+ if err := createDatabase (projectID , instanceID , databaseID , dialect ); err != nil {
117154 return emulator , fmt .Errorf ("failed to create database: %v" , err )
118155 }
119156 return emulator , nil
@@ -148,17 +185,24 @@ func createInstance(projectID, instanceID string) error {
148185 return nil
149186}
150187
151- func createDatabase (projectID , instanceID , databaseID string ) error {
188+ func createDatabase (projectID , instanceID , databaseID string , dialect adminpb. DatabaseDialect ) error {
152189 ctx := context .Background ()
153190 adminClient , err := database .NewDatabaseAdminClient (ctx )
154191 if err != nil {
155192 return err
156193 }
157- defer adminClient .Close ()
194+ defer func () { _ = adminClient .Close () } ()
158195
196+ var createStatement string
197+ if dialect == adminpb .DatabaseDialect_POSTGRESQL {
198+ createStatement = fmt .Sprintf (`CREATE DATABASE "%s"` , databaseID )
199+ } else {
200+ createStatement = fmt .Sprintf ("CREATE DATABASE `%s`" , databaseID )
201+ }
159202 op , err := adminClient .CreateDatabase (ctx , & adminpb.CreateDatabaseRequest {
160203 Parent : fmt .Sprintf ("projects/%s/instances/%s" , projectID , instanceID ),
161- CreateStatement : fmt .Sprintf ("CREATE DATABASE `%s`" , databaseID ),
204+ CreateStatement : createStatement ,
205+ DatabaseDialect : dialect ,
162206 })
163207 if err != nil {
164208 return err
0 commit comments