Changeset 6905
- Timestamp:
- 12/10/07 20:22:40 (9 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/db/backends/oracle/base.py
r6799 r6905 456 456 return tuple([smart_str(p, self.charset, True) for p in params]) 457 457 458 def _guess_input_sizes(self, params_list): 459 # Mark any string parameter greater than 4000 characters as an NCLOB. 460 if isinstance(params_list[0], dict): 461 sizes = {} 462 iterators = [params.iteritems() for params in params_list] 463 else: 464 sizes = [None] * len(params_list[0]) 465 iterators = [enumerate(params) for params in params_list] 466 for iterator in iterators: 467 for key, value in iterator: 468 if isinstance(value, basestring) and len(value) > 4000: 469 sizes[key] = Database.NCLOB 470 if isinstance(sizes, dict): 471 self.setinputsizes(**sizes) 472 else: 473 self.setinputsizes(*sizes) 474 458 475 def execute(self, query, params=None): 459 476 if params is None: … … 469 486 query = query[:-1] 470 487 query = smart_str(query, self.charset) % tuple(args) 488 self._guess_input_sizes([params]) 471 489 return Database.Cursor.execute(self, query, params) 472 490 … … 485 503 query = smart_str(query, self.charset) % tuple(args) 486 504 new_param_list = [self._format_params(i) for i in params] 505 self._guess_input_sizes(new_param_list) 487 506 return Database.Cursor.executemany(self, query, new_param_list) 488 507 django/trunk/tests/regressiontests/model_regress/models.py
r6195 r6905 12 12 status = models.IntegerField(blank=True, null=True, choices=CHOICES) 13 13 misc_data = models.CharField(max_length=100, blank=True) 14 article_text = models.TextField() 14 15 15 16 class Meta: … … 43 44 >>> a2.misc_data 44 45 u'' 46 47 # TextFields can hold more than 4000 characters (this was broken in Oracle). 48 >>> a3 = Article(headline="Really, really big", pub_date=datetime.now()) 49 >>> a3.article_text = "ABCDE" * 1000 50 >>> a3.save() 51 >>> a4 = Article.objects.get(pk=a3.id) 52 >>> len(a4.article_text) 53 5000 54 45 55 """ 46 56 }
