* Mantis #22249 Mysql BIT type support.

git-svn-id: trunk@21743 -
This commit is contained in:
marco 2012-06-30 17:57:29 +00:00
parent c4ec774c4c
commit b616fca354

View File

@ -530,9 +530,9 @@ begin
C:=Cursor as TCursorName; C:=Cursor as TCursorName;
if c.FStatementType in [stSelect,stExecProcedure] then if c.FStatementType in [stSelect,stExecProcedure] then
c.FNeedData:=False; c.FNeedData:=False;
If (C.FRes<>Nil) then if assigned(C.FRes) then
begin begin
Mysql_free_result(C.FRes); mysql_free_result(C.FRes);
C.FRes:=Nil; C.FRes:=Nil;
end; end;
SetLength(c.MapDSRowToMSQLRow,0); SetLength(c.MapDSRowToMSQLRow,0);
@ -588,16 +588,15 @@ var ASize, ADecimals: integer;
begin begin
Result := True; Result := True;
ASize := AField^.length; ASize := AField^.length;
NewSize := 0;
case AField^.ftype of case AField^.ftype of
FIELD_TYPE_LONGLONG: FIELD_TYPE_LONGLONG:
begin begin
NewType := ftLargeint; NewType := ftLargeint;
NewSize := 0;
end; end;
FIELD_TYPE_TINY, FIELD_TYPE_SHORT, FIELD_TYPE_YEAR: FIELD_TYPE_TINY, FIELD_TYPE_SHORT, FIELD_TYPE_YEAR:
begin begin
NewType := ftSmallint; NewType := ftSmallint;
NewSize := 0;
end; end;
FIELD_TYPE_LONG, FIELD_TYPE_INT24: FIELD_TYPE_LONG, FIELD_TYPE_INT24:
begin begin
@ -605,7 +604,6 @@ begin
NewType := ftAutoInc NewType := ftAutoInc
else else
NewType := ftInteger; NewType := ftInteger;
NewSize := 0;
end; end;
{$ifdef mysql50_up} {$ifdef mysql50_up}
FIELD_TYPE_NEWDECIMAL, FIELD_TYPE_NEWDECIMAL,
@ -624,32 +622,25 @@ begin
FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE: FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE:
begin begin
NewType := ftFloat; NewType := ftFloat;
NewSize := 0;
end; end;
FIELD_TYPE_TIMESTAMP, FIELD_TYPE_DATETIME: FIELD_TYPE_TIMESTAMP, FIELD_TYPE_DATETIME:
begin begin
NewType := ftDateTime; NewType := ftDateTime;
NewSize := 0;
end; end;
FIELD_TYPE_DATE: FIELD_TYPE_DATE:
begin begin
NewType := ftDate; NewType := ftDate;
NewSize := 0;
end; end;
FIELD_TYPE_TIME: FIELD_TYPE_TIME:
begin begin
NewType := ftTime; NewType := ftTime;
NewSize := 0;
end; end;
FIELD_TYPE_VAR_STRING, FIELD_TYPE_STRING, FIELD_TYPE_ENUM, FIELD_TYPE_SET: FIELD_TYPE_VAR_STRING, FIELD_TYPE_STRING, FIELD_TYPE_ENUM, FIELD_TYPE_SET:
begin begin
// Since mysql server version 5.0.3 string-fields with a length of more // Since mysql server version 5.0.3 string-fields with a length of more
// then 256 characters are suported // then 256 characters are suported
if ASize>dsMaxStringSize then if ASize>dsMaxStringSize then
begin NewType := ftMemo
NewType := ftMemo;
NewSize := 0;
end
else else
begin begin
if AField^.ftype = FIELD_TYPE_STRING then if AField^.ftype = FIELD_TYPE_STRING then
@ -676,8 +667,11 @@ begin
{$ELSE} {$ELSE}
NewType := ftBlob; NewType := ftBlob;
{$ENDIF} {$ENDIF}
NewSize := 0; end;
end {$IFDEF MYSQL50_UP}
FIELD_TYPE_BIT:
NewType := ftLargeInt;
{$ENDIF}
else else
Result := False; Result := False;
end; end;
@ -1028,6 +1022,15 @@ begin
end; end;
FIELD_TYPE_BLOB: FIELD_TYPE_BLOB:
CreateBlob := True; CreateBlob := True;
{$IFDEF MYSQL50_UP}
FIELD_TYPE_BIT:
begin
VL := 0;
for VI := 0 to Len-1 do
VL := VL * 256 + PByte(Source+VI)^;
move(VL, Dest^, sizeof(LargeInt));
end;
{$ENDIF}
end; end;
Result := True; Result := True;
end; end;