@@ -1169,6 +1169,17 @@ sub sql_row_from_value
1169
1169
{
1170
1170
my ( $self , $session , $value ) = @_ ;
1171
1171
1172
+ # Truncate value if it is longer than what the database column permits.
1173
+ {
1174
+ use bytes;
1175
+ my $maxlength = $self -> get_sql_column_size( $session );
1176
+ if ( $maxlength && length ( $value ) > $maxlength )
1177
+ {
1178
+ $value = substr ( $value , 0, $maxlength );
1179
+ $session -> log ( " WARNING: Value for field '" .$self -> name." ' was truncated, as it was longer than $maxlength characters." );
1180
+ }
1181
+ }
1182
+
1172
1183
return ( $value );
1173
1184
}
1174
1185
@@ -1278,6 +1289,45 @@ sub get_sql_index
1278
1289
}
1279
1290
1280
1291
1292
+ # #####################################################################
1293
+ =pod
1294
+
1295
+ =begin InternalDoc
1296
+
1297
+ =item $sql = $field->get_sql_column_size
1298
+
1299
+ Return the column size of the field in the database if that is
1300
+ applicable
1301
+
1302
+ =end InternalDoc
1303
+
1304
+ =cut
1305
+ # #####################################################################
1306
+
1307
+ sub get_sql_column_size
1308
+ {
1309
+ my ( $self , $session ) = @_ ;
1310
+
1311
+ my $db = $session -> get_db;
1312
+ my $ds = $self -> dataset;
1313
+
1314
+ if ( defined $session -> {database }-> {$ds -> get_sql_table_name}-> {$self -> get_name}-> {column_size } )
1315
+ {
1316
+ return $session -> {database }-> {$ds -> get_sql_table_name}-> {$self -> get_name}-> {column_size };
1317
+ }
1318
+
1319
+ my $sth = $db -> {dbh }-> column_info(
1320
+ undef , # catalogue
1321
+ undef , # schema
1322
+ $ds -> get_sql_table_name,
1323
+ $self -> get_name,
1324
+ );
1325
+ my $res = $sth -> fetchall_arrayref( { COLUMN_SIZE => 1 } );
1326
+
1327
+ $session -> {database }-> {$ds -> get_sql_table_name}-> {$self -> get_name}-> {column_size } = $res -> [0] && $res -> [0]-> {COLUMN_SIZE } ? $res -> [0]-> {COLUMN_SIZE } : 0;
1328
+
1329
+ return $session -> {database }-> {$ds -> get_sql_table_name}-> {$self -> get_name}-> {column_size };
1330
+ }
1281
1331
1282
1332
1283
1333
# #####################################################################
0 commit comments