def test_convert_with_col_datetime(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col_datetime', mysql_data_types.MySQLDateTime()), { 'name': 'col_datetime', 'type': ['null', 'string'], 'datetime': True, 'default': None }) self._convert_and_assert_with_one_column( converter, SQLColumn('col_datetime', mysql_data_types.MySQLDateTime(5), is_nullable=False), { 'name': 'col_datetime', 'type': 'string', 'datetime': True, AvroMetaDataKeys.FSP: 5 }) self._convert_and_assert_with_one_column( converter, SQLColumn('col_datetime', mysql_data_types.MySQLDateTime(2)), { 'name': 'col_datetime', 'type': ['null', 'string'], 'datetime': True, 'default': None, AvroMetaDataKeys.FSP: 2 })
def test_convert_with_col_timestamp(self, converter): timestamp_micros_schema = { 'type': 'long', 'logicalType': 'timestamp-micros' } timestamp_millis_schema = { 'type': 'long', 'logicalType': 'timestamp-millis' } self._convert_and_assert_with_one_column( converter, SQLColumn('col_ts', mysql_data_types.MySQLTimestamp()), { 'name': 'col_ts', 'type': ['null', timestamp_millis_schema], 'default': None }) self._convert_and_assert_with_one_column( converter, SQLColumn('col_ts', mysql_data_types.MySQLTimestamp(5)), { 'name': 'col_ts', 'type': ['null', timestamp_micros_schema], 'default': None, AvroMetaDataKeys.FSP: 5 }) self._convert_and_assert_with_one_column( converter, SQLColumn('col_ts', mysql_data_types.MySQLTimestamp(2)), { 'name': 'col_ts', 'type': ['null', timestamp_millis_schema], 'default': None, AvroMetaDataKeys.FSP: 2 })
def test_create_sql_table_column_types_are_case_insensitive(self, handler): create_definitions = ['lows int(11)', 'CAPS INT(11)', 'MiXeD INt(11)'] expected_columns = [ SQLColumn('lows', data_types.MySQLInt(11)), SQLColumn('CAPS', data_types.MySQLInt(11)), SQLColumn('MiXeD', data_types.MySQLInt(11)), ] self.assert_sql_table_equal_with_create_defs(handler, create_definitions, expected_columns)
def test_convert_with_col_int(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col_int', mysql_data_types.MySQLInt(11)), { 'name': 'col_int', 'type': ['null', 'int'], 'default': None })
def test_convert_with_col_bool(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col_bool', mysql_data_types.MySQLBool()), { 'name': 'col_bool', 'type': ['null', 'boolean'], 'default': None })
def test_create_sql_table_stmt_with_quoted_primary_keys( self, handler, primary_key_identifier): create_definitions = [ 'id int(11) not null', '`name` varchar(8)', 'primary key({})'.format(primary_key_identifier) ] expected_columns = [ SQLColumn('id', data_types.MySQLInt(11), is_nullable=False, primary_key_order=1), SQLColumn('name', data_types.MySQLVarChar(8)) ] self.assert_sql_table_equal_with_create_defs(handler, create_definitions, expected_columns)
def test_convert_with_table_namespace_and_aliases(self, converter): doc = 'I am doc' aliases = ['foo'] metadata = { MetaDataKey.NAMESPACE: self.namespace, MetaDataKey.ALIASES: aliases } col_name = 'col' sql_table = SQLTable( self.table_name, [SQLColumn(col_name, mysql_data_types.MySQLInt(11))], doc=doc, **metadata) expected_schema = { 'type': 'record', 'name': self.table_name, 'namespace': self.namespace, 'fields': [{ 'name': col_name, 'type': ['null', 'int'], 'default': None }], 'doc': doc, 'aliases': aliases } actual_schema = converter.convert(sql_table) assert expected_schema == actual_schema
def test_convert_with_col_bit(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col_bit', mysql_data_types.MySQLBit(6)), { 'name': 'col_bit', 'type': ['null', 'int'], 'default': None, AvroMetaDataKeys.BIT_LEN: 6 })
def test_convert_with_col_year(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col_year', mysql_data_types.MySQLYear()), { 'name': 'col_year', 'type': ['null', 'long'], 'default': None, AvroMetaDataKeys.YEAR: True })
def test_convert_with_col_char(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col_char', mysql_data_types.MySQLChar(16)), { 'name': 'col_char', 'type': ['null', 'string'], 'default': None, AvroMetaDataKeys.FIX_LEN: 16 })
def test_convert_with_field_boolean(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': ['null', 'boolean'], 'default': None}, SQLColumn(self.col_name, redshift_types.RedshiftBoolean()), )
def test_create_sql_table_from_sql_stmts_with_multi_sqls(self, handler): sql_table = handler.create_sql_table_from_sql_stmts( [self.alter_table_sql, self.create_table_sql]) expected_column = SQLColumn('id', data_types.MySQLInt(11), is_nullable=False) expected_table = SQLTable(self.table_name, [expected_column]) assert expected_table == sql_table
def test_convert_with_non_nullable_without_default_column(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col', mysql_data_types.MySQLInt(11), is_nullable=False), { 'name': 'col', 'type': 'int' })
def test_convert_with_column_default_value(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col', mysql_data_types.MySQLInt(11), default_value=10), { 'name': 'col', 'type': ['int', 'null'], 'default': 10 })
def test_convert_with_col_varbinary(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col_varbinary', mysql_data_types.MySQLVarBinary(16)), { 'name': 'col_varbinary', 'type': ['null', 'bytes'], 'default': None, AvroMetaDataKeys.MAX_LEN: 16 })
def test_convert_with_col_date(self, converter): date_schema = {'type': 'int', 'logicalType': 'date'} self._convert_and_assert_with_one_column( converter, SQLColumn('col_date', mysql_data_types.MySQLDate()), { 'name': 'col_date', 'type': ['null', date_schema], 'default': None })
def test_get_column_def_sql_with_string_type(self, migration): column = SQLColumn( 'foo', data_types.RedshiftVarChar(256), attributes=[SQLAttribute.create_with_value('attr', '')], aliases='bar') expected = 'foo varchar(256) attr \'\'' actual = migration.get_column_def_sql(column) assert expected == actual
def test_convert_with_field_timestamp(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': ['null', 'long'], 'default': None, AvroMetaDataKeys.TIMESTAMP: True}, SQLColumn(self.col_name, redshift_types.RedshiftTimestamp()) )
def test_convert_with_unsigned_int_column(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': ['null', 'int'], 'default': None, 'unsigned': True}, SQLColumn(self.col_name, redshift_types.RedshiftInteger()) )
def test_convert_with_field_string_with_max_len(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': ['null', 'string'], 'default': None, AvroMetaDataKeys.MAX_LEN: 16}, SQLColumn(self.col_name, redshift_types.RedshiftVarChar(32)) )
def test_convert_bytes_field_with_exceeded_max_len(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': ['null', 'bytes'], 'default': None, AvroMetaDataKeys.MAX_LEN: 65536}, SQLColumn(self.col_name, redshift_types.RedshiftVarChar(65535)) )
def test_convert_with_field_timestamp_millis(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': ['null', {'logicalType': 'timestamp-millis', 'type': 'long'} ]}, SQLColumn(self.col_name, redshift_types.RedshiftTimestampTz()) )
def test_convert_with_field_date(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': ['null', {'logicalType': 'date', 'type': 'int'} ]}, SQLColumn(self.col_name, redshift_types.RedshiftDate()) )
def test_convert_with_unsigned_int_column(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col', mysql_data_types.MySQLInt(11, unsigned=True)), { 'name': 'col', 'type': ['null', 'long'], 'default': None, 'unsigned': True })
def test_convert_with_non_nullable_without_default_column(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': 'int'}, SQLColumn( self.col_name, redshift_types.RedshiftInteger(), is_nullable=False ) )
def test_convert_with_column_default_value(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': ['int', 'null'], 'default': 10}, SQLColumn( self.col_name, redshift_types.RedshiftInteger(), default_value=10 ) )
def test_convert_with_col_float(self, converter): self._convert_and_assert_with_one_column( converter, SQLColumn('col_float', mysql_data_types.MySQLFloat(10, 2)), { 'name': 'col_float', 'type': ['null', 'float'], 'default': None, AvroMetaDataKeys.PRECISION: 10, AvroMetaDataKeys.SCALE: 2 })
def test_convert_with_field_float(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': ['null', 'float'], 'default': None, AvroMetaDataKeys.PRECISION: 10, AvroMetaDataKeys.SCALE: 2}, SQLColumn(self.col_name, redshift_types.RedshiftReal()) )
def test_create_sql_table_from_sql_stmts_with_primary_keys(self, handler): create_definitions = [ 'id int(11) not null', 'pid int(11) not null', 'tag char(3)', 'primary key(id, pid)' ] expected_columns = [ SQLColumn('id', data_types.MySQLInt(11), is_nullable=False, primary_key_order=1), SQLColumn('pid', data_types.MySQLInt(11), is_nullable=False, primary_key_order=2), SQLColumn('tag', data_types.MySQLChar(3)) ] self.assert_sql_table_equal_with_create_defs(handler, create_definitions, expected_columns)
def test_convert_with_column_with_alias(self, converter): self._convert_and_assert_with_one_column( converter, {'name': self.col_name, 'type': 'int', 'aliases': ['abc']}, SQLColumn( self.col_name, redshift_types.RedshiftInteger(), is_nullable=False, **{MetaDataKey.ALIASES: ['abc']} ) )