@@ -117,124 +117,118 @@ describe('Spanner', () => {
117117 gaxOptions : GAX_OPTIONS ,
118118 } ;
119119
120- before ( async ( ) => {
121- try {
122- await deleteOldTestInstances ( ) ;
123- const instanceAdminClient = spanner . getInstanceAdminClient ( ) ;
124- const databaseAdminClient = spanner . getDatabaseAdminClient ( ) ;
125- if ( generateInstanceForTest ) {
126- const [ instanceCreationOperation ] =
127- await instanceAdminClient . createInstance ( {
128- instanceId : instanceId ,
129- parent : instanceAdminClient . projectPath ( projectId ! ) ,
130- instance : {
131- config : instanceAdminClient . instanceConfigPath (
132- projectId ! ,
133- INSTANCE_CONFIG . config
134- ) ,
135- nodeCount : 1 ,
136- displayName : 'Test name for instance.' ,
137- labels : {
138- created : Math . round ( Date . now ( ) / 1000 ) . toString ( ) , // current time
139- } ,
140- } ,
141- } ) ;
142- await instanceCreationOperation . promise ( ) ;
143- instance = spanner . instance ( instanceId ! ) ;
144- RESOURCES_TO_CLEAN . push ( instance ) ;
145- } else {
146- instance = spanner . instance ( envInstanceName ) ;
147- console . log (
148- `Not creating temp instance, using + ${ instance . formattedName_ } ...`
149- ) ;
150- }
151- if ( IS_EMULATOR_ENABLED ) {
152- const createSingersTableStatement = `
153- CREATE TABLE ${ TABLE_NAME } (
154- SingerId STRING(1024) NOT NULL,
155- Name STRING(1024),
156- ) PRIMARY KEY(SingerId)` ;
157- const [ googleSqlOperation1 ] = await databaseAdminClient . createDatabase ( {
158- createStatement : 'CREATE DATABASE `' + gSQLdatabaseId1 + '`' ,
159- extraStatements : [ createSingersTableStatement ] ,
160- parent : databaseAdminClient . instancePath ( projectId ! , instanceId ! ) ,
161- } ) ;
162- await googleSqlOperation1 . promise ( ) ;
163- DATABASE = instance . database ( gSQLdatabaseId1 ) ;
164- RESOURCES_TO_CLEAN . push ( DATABASE ) ;
165- } else {
166- // Reading proto descriptor file
167- const protoDescriptor = fs
168- . readFileSync ( 'test/data/descriptors.pb' )
169- . toString ( 'base64' ) ;
120+ async function createInstance ( id ) {
121+ const instanceAdminClient = spanner . getInstanceAdminClient ( ) ;
122+ const [ instanceCreationOperation ] =
123+ await instanceAdminClient . createInstance ( {
124+ instanceId : id ,
125+ parent : instanceAdminClient . projectPath ( projectId ! ) ,
126+ instance : {
127+ config : instanceAdminClient . instanceConfigPath (
128+ projectId ! ,
129+ INSTANCE_CONFIG . config
130+ ) ,
131+ nodeCount : 1 ,
132+ displayName : 'Test name for instance.' ,
133+ labels : {
134+ created : Math . round ( Date . now ( ) / 1000 ) . toString ( ) , // current time
135+ } ,
136+ } ,
137+ } ) ;
138+ await instanceCreationOperation . promise ( ) ;
139+ }
170140
171- const createSingersTableStatement = [
172- `
173- CREATE PROTO BUNDLE (
174- examples.spanner.music.SingerInfo,
175- examples.spanner.music.Genre,
176- )` ,
141+ async function creategSQLDatabase ( gSQLdatabaseId , protoDescriptor ) {
142+ const databaseAdminClient = spanner . getDatabaseAdminClient ( ) ;
143+ const createSingersTableStatement = protoDescriptor
144+ ? [
145+ `CREATE PROTO BUNDLE (
146+ examples.spanner.music.SingerInfo,
147+ examples.spanner.music.Genre,
148+ )` ,
177149 `
178- CREATE TABLE ${ TABLE_NAME } (
179- SingerId STRING(1024) NOT NULL,
180- Name STRING(1024),
181- ) PRIMARY KEY(SingerId)` ,
150+ CREATE TABLE ${ TABLE_NAME } (
151+ SingerId STRING(1024) NOT NULL,
152+ Name STRING(1024),
153+ ) PRIMARY KEY(SingerId)` ,
154+ ]
155+ : [
156+ `CREATE TABLE ${ TABLE_NAME } (
157+ SingerId STRING(1024) NOT NULL,
158+ Name STRING(1024),
159+ ) PRIMARY KEY(SingerId)` ,
182160 ] ;
183- const [ googleSqlOperation1 ] = await databaseAdminClient . createDatabase ( {
184- createStatement : 'CREATE DATABASE `' + gSQLdatabaseId1 + '`' ,
185- extraStatements : createSingersTableStatement ,
186- parent : databaseAdminClient . instancePath ( projectId ! , instanceId ! ) ,
187- protoDescriptors : protoDescriptor ,
188- } ) ;
189- await googleSqlOperation1 . promise ( ) ;
190- DATABASE = instance . database ( gSQLdatabaseId1 ) ;
191- RESOURCES_TO_CLEAN . push ( DATABASE ) ;
192- }
193- const [ postgreSqlOperation ] = await databaseAdminClient . createDatabase ( {
194- createStatement : 'CREATE DATABASE "' + pgdatabaseId + '"' ,
195- parent : databaseAdminClient . instancePath ( projectId ! , instanceId ! ) ,
196- databaseDialect :
197- protos . google . spanner . admin . database . v1 . DatabaseDialect . POSTGRESQL ,
198- } ) ;
199- await postgreSqlOperation . promise ( ) ;
200- const statements = [
201- `CREATE TABLE ${ TABLE_NAME } (
202- SingerId VARCHAR(1024) NOT NULL,
203- Name VARCHAR(1024),
204- PRIMARY KEY (SingerId)
205- );` ,
206- ] ;
207- const [ postgreSqlOperationUpdateDDL ] =
208- await databaseAdminClient . updateDatabaseDdl ( {
209- database : databaseAdminClient . databasePath (
210- projectId ! ,
211- instanceId ! ,
212- pgdatabaseId
213- ) ,
214- statements : statements ,
215- } ) ;
216- await postgreSqlOperationUpdateDDL . promise ( ) ;
217- PG_DATABASE = instance . database ( pgdatabaseId , { incStep : 1 } ) ;
218- RESOURCES_TO_CLEAN . push ( PG_DATABASE ) ;
219-
220- const createSingersTableStatement = `
221- CREATE TABLE ${ TABLE_NAME } (
222- SingerId STRING(1024) NOT NULL,
223- Name STRING(1024),
224- ) PRIMARY KEY(SingerId)` ;
225- const [ googleSqlOperation2 ] = await databaseAdminClient . createDatabase ( {
226- createStatement : 'CREATE DATABASE `' + gSQLdatabaseId2 + '`' ,
227- extraStatements : [ createSingersTableStatement ] ,
228- parent : databaseAdminClient . instancePath ( projectId ! , instanceId ! ) ,
229- } ) ;
230- await googleSqlOperation2 . promise ( ) ;
231- DATABASE_DROP_PROTECTION = instance . database ( gSQLdatabaseId2 , {
232- incStep : 1 ,
233- } ) ;
234- RESOURCES_TO_CLEAN . push ( DATABASE_DROP_PROTECTION ) ;
235- } catch ( err ) {
236- console . log ( 'ERROR: ' , err ) ;
161+ const [ googleSqlOperation ] = await databaseAdminClient . createDatabase ( {
162+ createStatement : 'CREATE DATABASE `' + gSQLdatabaseId + '`' ,
163+ extraStatements : createSingersTableStatement ,
164+ parent : databaseAdminClient . instancePath ( projectId ! , instanceId ! ) ,
165+ protoDescriptors : protoDescriptor ? protoDescriptor : null ,
166+ } ) ;
167+ await googleSqlOperation . promise ( ) ;
168+ }
169+
170+ async function createPostgresDatabase ( pgdatabaseId ) {
171+ const databaseAdminClient = spanner . getDatabaseAdminClient ( ) ;
172+ const [ pgOperation ] = await databaseAdminClient . createDatabase ( {
173+ createStatement : 'CREATE DATABASE "' + pgdatabaseId + '"' ,
174+ parent : databaseAdminClient . instancePath ( projectId ! , instanceId ! ) ,
175+ databaseDialect :
176+ protos . google . spanner . admin . database . v1 . DatabaseDialect . POSTGRESQL ,
177+ } ) ;
178+ await pgOperation . promise ( ) ;
179+ const statements = [
180+ `CREATE TABLE ${ TABLE_NAME } (
181+ SingerId VARCHAR(1024) NOT NULL,
182+ Name VARCHAR(1024),
183+ PRIMARY KEY (SingerId)
184+ );` ,
185+ ] ;
186+ const [ postgreSqlOperationUpdateDDL ] =
187+ await databaseAdminClient . updateDatabaseDdl ( {
188+ database : databaseAdminClient . databasePath (
189+ projectId ! ,
190+ instanceId ! ,
191+ pgdatabaseId
192+ ) ,
193+ statements : statements ,
194+ } ) ;
195+ await postgreSqlOperationUpdateDDL . promise ( ) ;
196+ }
197+
198+ before ( async ( ) => {
199+ await deleteOldTestInstances ( ) ;
200+ if ( generateInstanceForTest ) {
201+ await createInstance ( instanceId ! ) ;
202+ instance = spanner . instance ( instanceId ! ) ;
203+ RESOURCES_TO_CLEAN . push ( instance ) ;
204+ } else {
205+ instance = spanner . instance ( envInstanceName ) ;
206+ console . log (
207+ `Not creating temp instance, using + ${ instance . formattedName_ } ...`
208+ ) ;
209+ }
210+ if ( IS_EMULATOR_ENABLED ) {
211+ await creategSQLDatabase ( gSQLdatabaseId1 , null ) ;
212+ DATABASE = instance . database ( gSQLdatabaseId1 ) ;
213+ RESOURCES_TO_CLEAN . push ( DATABASE ) ;
214+ } else {
215+ // Reading proto descriptor file
216+ const protoDescriptor = fs
217+ . readFileSync ( 'test/data/descriptors.pb' )
218+ . toString ( 'base64' ) ;
219+ creategSQLDatabase ( gSQLdatabaseId1 , protoDescriptor ) ;
220+ DATABASE = instance . database ( gSQLdatabaseId1 ) ;
221+ RESOURCES_TO_CLEAN . push ( DATABASE ) ;
237222 }
223+ await createPostgresDatabase ( pgdatabaseId ) ;
224+ PG_DATABASE = instance . database ( pgdatabaseId , { incStep : 1 } ) ;
225+ RESOURCES_TO_CLEAN . push ( PG_DATABASE ) ;
226+
227+ await creategSQLDatabase ( gSQLdatabaseId2 , null ) ;
228+ DATABASE_DROP_PROTECTION = instance . database ( gSQLdatabaseId2 , {
229+ incStep : 1 ,
230+ } ) ;
231+ RESOURCES_TO_CLEAN . push ( DATABASE_DROP_PROTECTION ) ;
238232 } ) ;
239233
240234 after ( async ( ) => {
@@ -282,6 +276,8 @@ describe('Spanner', () => {
282276 let postgreSqlTable ;
283277
284278 before ( async ( ) => {
279+ googleSqlTable = DATABASE . table ( TABLE_NAME ) ;
280+ postgreSqlTable = PG_DATABASE . table ( TABLE_NAME ) ;
285281 if ( IS_EMULATOR_ENABLED ) {
286282 // TODO: add column Float32Value FLOAT32 and FLOAT32Array Array<FLOAT32> while using float32 feature.
287283 const [ googleSqlOperationUpdateDDL ] = await DATABASE . updateSchema (
@@ -466,12 +462,10 @@ describe('Spanner', () => {
466462 } ;
467463
468464 it ( 'GOOGLE_STANDARD_SQL should throw an error for incorrect value types' , done => {
469- googleSqlTable = DATABASE . table ( TABLE_NAME ) ;
470465 incorrectValueType ( done , googleSqlTable ) ;
471466 } ) ;
472467
473468 it ( 'POSTGRESQL should throw an error for incorrect value types' , done => {
474- postgreSqlTable = PG_DATABASE . table ( TABLE_NAME ) ;
475469 incorrectValueType ( done , postgreSqlTable ) ;
476470 } ) ;
477471
0 commit comments