def test_query_with_non_unique_keys(self, mock_connect): inst = Postgres(self.source, OPTIONS) inst.conn, inst.cursor = connect(self.source) cursor_return_value = mock_connect.return_value.cursor.return_value cursor_return_value.fetchall.return_value = [ { 'attname': 'idx3', 'indisunique': False, 'indisprimary': False, 'indnatts': 1, 'indexrelid': 'idx3123' }, ] schema = 'public' table = 'test' inckey = '' incval = '' max_value = 100 keys = inst.get_table_metadata(SQL_GET_KEYS, schema, table) keys = key_strategy(keys) state = None result = get_query(schema, table, inckey, incval, keys, max_value, state) expected = 'SELECT * FROM "public"."test" ORDER BY "idx3"' self.assertEqual(result, expected)
def test_where_with_state_and_incremental(self): inckey = 'id' incval = 2 max_value = 100 schema = 'public' table = 'test' keys = [ { 'attname': 'pk1', 'indisunique': True, 'indisprimary': True }, ] state = OrderedDict([ ('pk1', '1'), ]) result = get_query(schema, table, inckey, incval, keys, max_value, state) expected = 'SELECT * FROM "public"."test" ' \ 'WHERE "pk1" >= \'1\' ' \ 'AND ("id" >= \'2\' AND "id" <= \'100\') ' \ 'ORDER BY "pk1","id"' self.assertEqual(result, expected)
def test_orderby_without_incremental(self): schema = 'public' table = 'test' inckey = '' incval = '' max_value = '' keys = [{'attname': 'pk1', 'indisunique': True, 'indisprimary': True}] state = {} result = get_query(schema, table, inckey, incval, keys, max_value, state) expected = 'SELECT * FROM "public"."test" ORDER BY "pk1"' self.assertEqual(result, expected)
def test_where_with_single_column(self): inckey = '' incval = '' max_value = '' schema = 'public' table = 'test' keys = [ { 'attname': 'pk1', 'indisunique': True, 'indisprimary': True }, ] state = OrderedDict([ ('pk1', '1'), ]) result = get_query(schema, table, inckey, incval, keys, max_value, state) expected = 'SELECT * FROM "public"."test" ' \ 'WHERE "pk1" >= \'1\' ' \ 'ORDER BY "pk1"' self.assertEqual(result, expected)
def test_where_with_state_and_without_incremental(self): inckey = '' incval = '' max_value = '' schema = 'public' table = 'test' keys = [{ 'attname': 'pk1', 'indisunique': True, 'indisprimary': True }, { 'attname': 'pk2', 'indisunique': True, 'indisprimary': True }] state = OrderedDict([('pk1', '1'), ('pk2', '1994-09-16')]) result = get_query(schema, table, inckey, incval, keys, max_value, state) expected = 'SELECT * FROM "public"."test" ' \ 'WHERE ("pk1","pk2") >= (\'1\',\'1994-09-16\') '\ 'ORDER BY "pk1","pk2"' self.assertEqual(result, expected)