Browse Source

* Mantis #22249 Mysql BIT type support.

git-svn-id: trunk@21743 -
marco 13 years ago
parent
commit
b616fca354
1 changed files with 18 additions and 15 deletions
  1. 18 15
      packages/fcl-db/src/sqldb/mysql/mysqlconn.inc

+ 18 - 15
packages/fcl-db/src/sqldb/mysql/mysqlconn.inc

@@ -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;
-        NewSize := 0;
-        end
+        NewType := ftMemo
       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;