details: https://code.tryton.org/tryton/commit/a50b564c40d1
branch: default
user: Cédric Krier <[email protected]>
date: Fri Jun 26 00:09:48 2026 +0200
description:
Add support for reducing size of char if all rows are lower
diffstat:
trytond/trytond/backend/postgresql/table.py | 21 +++++++++++++++------
trytond/trytond/backend/sqlite/table.py | 21 +++++++++++++++------
2 files changed, 30 insertions(+), 12 deletions(-)
diffs (69 lines):
diff -r 74f84aeb1225 -r a50b564c40d1 trytond/trytond/backend/postgresql/table.py
--- a/trytond/trytond/backend/postgresql/table.py Thu Jul 02 16:40:30
2026 +0200
+++ b/trytond/trytond/backend/postgresql/table.py Fri Jun 26 00:09:48
2026 +0200
@@ -384,12 +384,21 @@
elif from_size and from_size < field_size:
self.alter_size(column_name, column_type[1])
else:
- logger.warning(
- 'Unable to migrate column %s on table %s '
- 'from varchar(%s) to varchar(%s).',
- column_name, self.table_name,
- from_size if from_size and from_size > 0 else "",
- field_size)
+ cursor.execute(SQL(
+ 'SELECT id FROM {} '
+ 'WHERE CHAR_LENGTH({}) > %s LIMIT 1').format(
+ Identifier(self.table_name),
+ Identifier(column_name)),
+ (field_size,))
+ if not cursor.rowcount:
+ self.alter_size(column_name, column_type[1])
+ else:
+ logger.warning(
+ 'Unable to migrate column %s on table %s '
+ 'from varchar(%s) to varchar(%s).',
+ column_name, self.table_name,
+ from_size if from_size and from_size > 0 else "",
+ field_size)
return
column_type = column_type[1]
diff -r 74f84aeb1225 -r a50b564c40d1 trytond/trytond/backend/sqlite/table.py
--- a/trytond/trytond/backend/sqlite/table.py Thu Jul 02 16:40:30 2026 +0200
+++ b/trytond/trytond/backend/sqlite/table.py Fri Jun 26 00:09:48 2026 +0200
@@ -200,6 +200,7 @@
def _add_raw_column(
self, column_name, column_type, default=None, field_size=None):
+ cursor = Transaction().connection.cursor()
if self.column_exist(column_name):
base_type = column_type[0].upper()
if base_type != self._columns[column_name]['typname']:
@@ -231,12 +232,20 @@
elif from_size and from_size < field_size:
self.alter_size(column_name, column_type[1])
else:
- logger.warning(
- 'Unable to migrate column %s on table %s '
- 'from varchar(%s) to varchar(%s).',
- column_name, self.table_name,
- from_size if from_size and from_size > 0 else "",
- field_size)
+ cursor.execute(
+ 'SELECT id FROM %s WHERE LENGTH(%s) > %%s LIMIT 1' % (
+ _escape_identifier(self.table_name),
+ _escape_identifier(column_name)),
+ (field_size,))
+ if not cursor.fetchone():
+ self.alter_size(column_name, column_type[1])
+ else:
+ logger.warning(
+ 'Unable to migrate column %s on table %s '
+ 'from varchar(%s) to varchar(%s).',
+ column_name, self.table_name,
+ from_size if from_size and from_size > 0 else "",
+ field_size)
return
cursor = Transaction().connection.cursor()