@@ -1169,6 +1169,17 @@ sub sql_row_from_value
11691169{
11701170 my ( $self , $session , $value ) = @_ ;
11711171
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+
11721183 return ( $value );
11731184}
11741185
@@ -1278,6 +1289,45 @@ sub get_sql_index
12781289}
12791290
12801291
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+ }
12811331
12821332
12831333# #####################################################################
0 commit comments