summaryrefslogtreecommitdiff
path: root/tests/backends/mysql/test_introspection.py
blob: 4f13622edab29005e3f099b5783d7587605af9c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from unittest import skipUnless

from django.db import connection, connections
from django.test import TestCase


@skipUnless(connection.vendor == 'mysql', 'MySQL tests')
class ParsingTests(TestCase):
    def test_parse_constraint_columns(self):
        _parse_constraint_columns = connection.introspection._parse_constraint_columns
        tests = (
            ('`height` >= 0', ['height'], ['height']),
            ('`cost` BETWEEN 1 AND 10', ['cost'], ['cost']),
            ('`ref1` > `ref2`', ['id', 'ref1', 'ref2'], ['ref1', 'ref2']),
            (
                '`start` IS NULL OR `end` IS NULL OR `start` < `end`',
                ['id', 'start', 'end'],
                ['start', 'end'],
            ),
            ('JSON_VALID(`json_field`)', ['json_field'], ['json_field']),
            ('CHAR_LENGTH(`name`) > 2', ['name'], ['name']),
            ("lower(`ref1`) != 'test'", ['id', 'owe', 'ref1'], ['ref1']),
            ("lower(`ref1`) != 'test'", ['id', 'lower', 'ref1'], ['ref1']),
            ("`name` LIKE 'test%'", ['name'], ['name']),
        )
        for check_clause, table_columns, expected_columns in tests:
            with self.subTest(check_clause):
                check_columns = _parse_constraint_columns(check_clause, table_columns)
                self.assertEqual(list(check_columns), expected_columns)


@skipUnless(connection.vendor == 'mysql', 'MySQL tests')
class StorageEngineTests(TestCase):
    databases = {'default', 'other'}

    def test_get_storage_engine(self):
        table_name = 'test_storage_engine'
        create_sql = 'CREATE TABLE %s (id INTEGER) ENGINE = %%s' % table_name
        drop_sql = 'DROP TABLE %s' % table_name
        default_connection = connections['default']
        other_connection = connections['other']
        try:
            with default_connection.cursor() as cursor:
                cursor.execute(create_sql % 'InnoDB')
                self.assertEqual(
                    default_connection.introspection.get_storage_engine(cursor, table_name),
                    'InnoDB',
                )
            with other_connection.cursor() as cursor:
                cursor.execute(create_sql % 'MyISAM')
                self.assertEqual(
                    other_connection.introspection.get_storage_engine(cursor, table_name),
                    'MyISAM',
                )
        finally:
            with default_connection.cursor() as cursor:
                cursor.execute(drop_sql)
            with other_connection.cursor() as cursor:
                cursor.execute(drop_sql)