@@ -10986,26 +10986,28 @@ procedure TTableColumn.ParseDatatype(Source: String);
1098610986
1098710987
1098810988function TTableColumn.CastAsText : String;
10989+ var
10990+ ColTypeAllowsCast: Boolean;
1098910991begin
1099010992 // Cast data types which are incompatible to string functions to text columns
1099110993 Result := FConnection.QuoteIdent(Name );
10994+ ColTypeAllowsCast := True;
1099210995 case FConnection.Parameters.NetTypeGroup of
1099310996 ngMySQL, ngSQLite: begin
10994- if DataType.Index in [dbdtUnknown, dbdtDate, dbdtDatetime, dbdtTime, dbdtTimestamp, dbdtJson, dbdtJsonB] then
10995- Result := ' CAST(' +Result+' AS CHAR)' ;
10997+ ColTypeAllowsCast := DataType.Index in [dbdtUnknown, dbdtDate, dbdtDatetime, dbdtTime, dbdtTimestamp, dbdtJson, dbdtJsonB];
1099610998 end ;
1099710999 ngMSSQL: begin
1099811000 // Be sure LEFT() and "col LIKE xyz" work with MSSQL
1099911001 // Also, prevent exceeding size limit of 8000 for NVARCHAR
11000- if DataType.Index in [dbdtUnknown, dbdtNtext, dbdtText] then
11001- Result := ' CAST(' +Result+' AS NVARCHAR(' +IntToStr(GRIDMAXDATA)+' ))' ;
11002+ ColTypeAllowsCast := DataType.Index in [dbdtUnknown, dbdtNtext, dbdtText];
1100211003 end ;
1100311004 ngPgSQL: begin
1100411005 // Cast most datatypes, including VARCHAR and TEXT, which may have an [] array attribute
11005- if not (DataType.Category in [dtcInteger, dtcReal]) then
11006- Result := Result + ' ::text' ;
11006+ ColTypeAllowsCast := not (DataType.Category in [dtcInteger, dtcReal]);
1100711007 end ;
1100811008 end ;
11009+ if ColTypeAllowsCast and FConnection.SqlProvider.Has(qCastAsText) then
11010+ Result := FConnection.SqlProvider.GetSql(qCastAsText, [Result]);
1100911011end ;
1101011012
1101111013
0 commit comments