summaryrefslogtreecommitdiff
path: root/migrate/changeset/databases/sqlite.py
blob: ebaa1de0d730a17d5e895660705a6c2e277b6022 (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
from migrate.changeset import ansisql,constraint,exceptions
from sqlalchemy.databases import sqlite as sa_base
#import sqlalchemy as sa

SQLiteSchemaGenerator = sa_base.SQLiteSchemaGenerator

class SQLiteColumnGenerator(SQLiteSchemaGenerator,ansisql.ANSIColumnGenerator):
    pass
class SQLiteColumnDropper(ansisql.ANSIColumnDropper):
    def visit_column(self,column):
        raise exceptions.NotSupportedError("SQLite does not support "
            "DROP COLUMN; see http://www.sqlite.org/lang_altertable.html")
class SQLiteSchemaChanger(ansisql.ANSISchemaChanger):
    def _not_supported(self,op):
        raise exceptions.NotSupportedError("SQLite does not support "
            "%s; see http://www.sqlite.org/lang_altertable.html"%op)
    def _visit_column_nullable(self,table_name,col_name,delta):
        return self._not_supported('ALTER TABLE')
    def _visit_column_default(self,table_name,col_name,delta):
        return self._not_supported('ALTER TABLE')
    def _visit_column_type(self,table_name,col_name,delta):
        return self._not_supported('ALTER TABLE')
    def _visit_column_name(self,table_name,col_name,delta):
        return self._not_supported('ALTER TABLE')
    def visit_index(self,param):
        self._not_supported('ALTER INDEX')
class SQLiteConstraintGenerator(ansisql.ANSIConstraintGenerator):
    def visit_migrate_primary_key_constraint(self,constraint):
        tmpl = "CREATE UNIQUE INDEX %s ON %s ( %s )"
        cols = ','.join([c.name for c in constraint.columns])
        tname = constraint.table.name
        name = constraint.name
        msg = tmpl%(name,tname,cols)
        self.append(msg)
        self.execute()
class SQLiteConstraintDropper(ansisql.ANSIColumnDropper):
    def visit_migrate_primary_key_constraint(self,constraint):
        tmpl = "DROP INDEX %s "
        name = constraint.name
        msg = tmpl%(name)
        self.append(msg)
        self.execute()

class SQLiteDialect(ansisql.ANSIDialect):
    columngenerator = SQLiteColumnGenerator
    columndropper = SQLiteColumnDropper
    schemachanger = SQLiteSchemaChanger
    constraintgenerator = SQLiteConstraintGenerator
    constraintdropper = SQLiteConstraintDropper