Django

Code

AlterModelOnSyncDB: patchstorageengines.txt

File patchstorageengines.txt, 2.9 kB (added by prz, 1 year ago)

Alternate Patch adding _Meta option

Line 
1 <p>For that I have another approach I took, I modified the settings file & added in Meta an option. To give you
2 an idea here's the patch
3 against Revision: 5773.
4 </p>
5 <pre class="wiki"># use a consistant MySQL storage type for all apps, all models
6
7 Index: django/db/models/options.py
8 ===================================================================
9 --- django/db/models/options.py (revision 5773)
10 +++ django/db/models/options.py (working copy)
11 @@ -15,7 +15,7 @@
12
13  DEFAULT_NAMES = ('verbose_name', 'db_table', 'ordering',
14                   'unique_together', 'permissions', 'get_latest_by',
15 -                 'order_with_respect_to', 'app_label', 'db_tablespace')
16 +                 'order_with_respect_to', 'app_label', 'db_tablespace', 'db_storage_engine')
17
18  class Options(object):
19      def __init__(self, meta):
20 @@ -30,6 +30,7 @@
21          self.get_latest_by = None
22          self.order_with_respect_to = None
23          self.db_tablespace = None
24 +        self.db_storage_engine = None
25          self.admin = None
26          self.meta = meta
27          self.pk = None
28 Index: django/db/backends/mysql/base.py
29 ===================================================================
30 --- django/db/backends/mysql/base.py    (revision 5773)
31 +++ django/db/backends/mysql/base.py    (working copy)
32 @@ -141,6 +141,7 @@
33  needs_upper_for_iops = False
34  supports_constraints = True
35  supports_tablespaces = False
36 +supports_storage_engines = True
37  uses_case_insensitive_names = False
38
39  def quote_name(name):
40 @@ -207,6 +208,9 @@
41  def get_autoinc_sql(table):
42      return None
43
44 +def get_storageengine_sql(engine):
45 +    return "ENGINE = %s" % engine
46 +
47  def get_sql_flush(style, tables, sequences):
48      """Return a list of SQL statements required to remove all data from
49      all tables in the database (without actually removing the tables
50 Index: django/core/management.py
51 ===================================================================
52 --- django/core/management.py   (revision 5773)
53 +++ django/core/management.py   (working copy)
54 @@ -153,6 +153,7 @@
55      Returns list_of_sql, pending_references_dict
56      """
57      from django.db import backend, models
58 +    from django.conf import settings
59
60      opts = model._meta
61      final_output = []
62 @@ -203,6 +204,9 @@
63      full_statement.append(')')
64      if opts.db_tablespace and backend.supports_tablespaces:
65          full_statement.append(backend.get_tablespace_sql(opts.db_tablespace))
66 +    if backend.supports_storage_engines:
67 +        storage = opts.db_storage_engine or settings.DATABASE_STORAGE_ENGINE
68 +        full_statement.append(backend.get_storageengine_sql(storage))
69      full_statement.append(';')
70      final_output.append('\n'.join(full_statement))
71
72 </pre>
73
74 <p>
75 For brevity's sake, Only works for SQL here, other backends would need to simply set the <tt>supports_storage_engines = False</tt>.
76 </p>
77 <p>
78 If enough interest arises, I can modify that into a proper patch against <tt>HEAD</tt>
79 </p>
80 <verbatim>
81         --- tony
82 </verbatim>