@@ -458,6 +458,61 @@ def setup(self) -> None:
458
458
)
459
459
460
460
461
+ class SnowflakeTargetExistingReservedNameTableAlter (TargetFileTestTemplate ):
462
+ name = "existing_reserved_name_table_alter"
463
+ # This sends a schema that will request altering from TIMESTAMP_NTZ to VARCHAR
464
+
465
+ @property
466
+ def singer_filepath (self ) -> Path :
467
+ current_dir = Path (__file__ ).resolve ().parent
468
+ return current_dir / "target_test_streams" / "reserved_words_in_table.singer"
469
+
470
+ def setup (self ) -> None :
471
+ connector = self .target .default_sink_class .connector_class (self .target .config )
472
+ table = f'{ self .target .config ['database' ]} .{ self .target .config ['default_target_schema' ]} ."ORDER"' .upper ()
473
+ connector .connection .execute (
474
+ f"""
475
+ CREATE OR REPLACE TABLE { table } (
476
+ ID VARCHAR(16777216),
477
+ COL_STR VARCHAR(16777216),
478
+ COL_TS TIMESTAMP_NTZ(9),
479
+ COL_INT STRING,
480
+ COL_BOOL BOOLEAN,
481
+ COL_VARIANT VARIANT,
482
+ _SDC_BATCHED_AT TIMESTAMP_NTZ(9),
483
+ _SDC_DELETED_AT VARCHAR(16777216),
484
+ _SDC_EXTRACTED_AT TIMESTAMP_NTZ(9),
485
+ _SDC_RECEIVED_AT TIMESTAMP_NTZ(9),
486
+ _SDC_SEQUENCE NUMBER(38,0),
487
+ _SDC_TABLE_VERSION NUMBER(38,0),
488
+ PRIMARY KEY (ID)
489
+ )
490
+ """ ,
491
+ )
492
+
493
+
494
+ class SnowflakeTargetReservedWordsInTable (TargetFileTestTemplate ):
495
+ # Contains reserved words from
496
+ # https://docs.snowflake.com/en/sql-reference/reserved-keywords
497
+ # Syncs records then alters schema by adding a non-reserved word column.
498
+ name = "reserved_words_in_table"
499
+
500
+ @property
501
+ def singer_filepath (self ) -> Path :
502
+ current_dir = Path (__file__ ).resolve ().parent
503
+ return current_dir / "target_test_streams" / "reserved_words_in_table.singer"
504
+
505
+ def validate (self ) -> None :
506
+ connector = self .target .default_sink_class .connector_class (self .target .config )
507
+ table = f'{ self .target .config ['database' ]} .{ self .target .config ['default_target_schema' ]} ."ORDER"' .upper ()
508
+ result = connector .connection .execute (
509
+ f"select * from { table } " ,
510
+ )
511
+ assert result .rowcount == 1
512
+ row = result .first ()
513
+ assert len (row ) == 13 , f"Row has unexpected length { len (row )} "
514
+
515
+
461
516
class SnowflakeTargetTypeEdgeCasesTest (TargetFileTestTemplate ):
462
517
name = "type_edge_cases"
463
518
@@ -540,6 +595,8 @@ def singer_filepath(self) -> Path:
540
595
SnowflakeTargetColonsInColName ,
541
596
SnowflakeTargetExistingTable ,
542
597
SnowflakeTargetExistingTableAlter ,
598
+ SnowflakeTargetExistingReservedNameTableAlter ,
599
+ SnowflakeTargetReservedWordsInTable ,
543
600
SnowflakeTargetTypeEdgeCasesTest ,
544
601
SnowflakeTargetColumnOrderMismatch ,
545
602
],
0 commit comments