示例#1
0
 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
         })
示例#2
0
    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)
示例#4
0
 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
         })
示例#5
0
 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)
示例#7
0
    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
示例#8
0
 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
         })
示例#9
0
 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
         })
示例#10
0
 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
         })
示例#11
0
 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
示例#13
0
 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'
         })
示例#14
0
 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
         })
示例#15
0
 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
         })
示例#16
0
    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
            })
示例#17
0
 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
示例#18
0
 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())
     )
示例#19
0
 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())
     )
示例#20
0
 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))
     )
示例#21
0
 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))
     )
示例#22
0
 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())
     )
示例#23
0
 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())
     )
示例#24
0
 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
         })
示例#25
0
 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
         )
     )
示例#26
0
 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
         )
     )
示例#27
0
 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
         })
示例#28
0
 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)
示例#30
0
 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']}
         )
     )