Эх сурвалжийг харах

[core] Fix Oracle issues with TIMESTAMP migration and adding CLOB field in loaddata command

Related Django issues:
https://code.djangoproject.com/ticket/23147
https://code.djangoproject.com/ticket/11487
Jenny Kim 10 жил өмнө
parent
commit
3729de64f8

+ 7 - 3
apps/useradmin/src/useradmin/migrations/0005_auto__add_field_userprofile_last_activity.py

@@ -9,9 +9,13 @@ class Migration(SchemaMigration):
 
     def forwards(self, orm):
         # Adding field 'UserProfile.last_activity'
-        db.add_column(u'useradmin_userprofile', 'last_activity',
-                      self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(1969, 12, 31, 0, 0)),
-                      keep_default=False)
+        if db.backend_name.lower() == 'oracle':
+            # Oracle requires strict TO_DATE format to be specified
+            db.execute("ALTER TABLE \"USERADMIN_USERPROFILE\" ADD \"LAST_ACTIVITY\" TIMESTAMP DEFAULT TO_DATE('1969-12-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS') NOT NULL")
+        else:
+            db.add_column(u'useradmin_userprofile', 'last_activity',
+                          self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(1969, 12, 31, 0, 0)),
+                          keep_default=False)
 
 
     def backwards(self, orm):

+ 1 - 1
apps/useradmin/src/useradmin/models.py

@@ -303,7 +303,7 @@ def install_sample_user():
     LOG.info('Sample user found: %s' % user.username)
     if user.username != SAMPLE_USER_INSTALL:
       with transaction.atomic():
-        user = auth_models.User.objects.filter(id=SAMPLE_USER_ID).select_for_update()[0]
+        user = auth_models.User.objects.get(id=SAMPLE_USER_ID)
         user.username = SAMPLE_USER_INSTALL
         user.save()
   except auth_models.User.DoesNotExist:

+ 3 - 2
desktop/core/ext-py/Django-1.6.10/django/db/backends/oracle/base.py

@@ -725,8 +725,9 @@ class OracleParam(object):
         if hasattr(param, 'input_size'):
             # If parameter has `input_size` attribute, use that.
             self.input_size = param.input_size
-        elif isinstance(param, six.string_types) and len(param) > 4000:
-            # Mark any string param greater than 4000 characters as a CLOB.
+        elif isinstance(param, six.string_types) and len(param) > 1000:
+            # Mark any string param greater than 1000 characters as a CLOB.
+            # loaddata does not convert long strings < 4000 to required CLOB type, so reduce to 1000
             self.input_size = Database.CLOB
         else:
             self.input_size = None