|
@@ -82,6 +82,7 @@ Type
|
|
function GetServerStatus: String;
|
|
function GetServerStatus: String;
|
|
procedure ConnectMySQL(var HMySQL : PMySQL;H,U,P : pchar);
|
|
procedure ConnectMySQL(var HMySQL : PMySQL;H,U,P : pchar);
|
|
procedure ExecuteDirectMySQL(const query : string);
|
|
procedure ExecuteDirectMySQL(const query : string);
|
|
|
|
+ function EscapeString(const Str : string) : string;
|
|
protected
|
|
protected
|
|
function StrToStatementType(s : string) : TStatementType; override;
|
|
function StrToStatementType(s : string) : TStatementType; override;
|
|
Procedure ConnectToServer; virtual;
|
|
Procedure ConnectToServer; virtual;
|
|
@@ -114,10 +115,13 @@ Type
|
|
function StartdbTransaction(trans : TSQLHandle; AParams : string) : boolean; override;
|
|
function StartdbTransaction(trans : TSQLHandle; AParams : string) : boolean; override;
|
|
procedure CommitRetaining(trans : TSQLHandle); override;
|
|
procedure CommitRetaining(trans : TSQLHandle); override;
|
|
procedure RollBackRetaining(trans : TSQLHandle); override;
|
|
procedure RollBackRetaining(trans : TSQLHandle); override;
|
|
|
|
+ function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override;
|
|
procedure UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); override;
|
|
procedure UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); override;
|
|
function RowsAffected(cursor: TSQLCursor): TRowsCount; override;
|
|
function RowsAffected(cursor: TSQLCursor): TRowsCount; override;
|
|
Public
|
|
Public
|
|
constructor Create(AOwner : TComponent); override;
|
|
constructor Create(AOwner : TComponent); override;
|
|
|
|
+ procedure GetFieldNames(const TableName : string; List : TStrings); override;
|
|
|
|
+ procedure GetTableNames(List : TStrings; SystemTables : Boolean = false); override;
|
|
procedure CreateDB; override;
|
|
procedure CreateDB; override;
|
|
procedure DropDB; override;
|
|
procedure DropDB; override;
|
|
Property ServerInfo : String Read FServerInfo;
|
|
Property ServerInfo : String Read FServerInfo;
|
|
@@ -226,12 +230,7 @@ var esc_str : pchar;
|
|
begin
|
|
begin
|
|
if (not assigned(field)) or field.IsNull then Result := 'Null'
|
|
if (not assigned(field)) or field.IsNull then Result := 'Null'
|
|
else if field.DataType = ftString then
|
|
else if field.DataType = ftString then
|
|
- begin
|
|
|
|
- Getmem(esc_str,sizeof(field.asstring)*2+1);
|
|
|
|
- mysql_real_escape_string(FMySQL,esc_str,pchar(field.asstring),length(field.asstring));
|
|
|
|
- Result := '''' + esc_str + '''';
|
|
|
|
- Freemem(esc_str);
|
|
|
|
- end
|
|
|
|
|
|
+ Result := '''' + EscapeString(field.AsString) + ''''
|
|
else Result := inherited GetAsSqlText(field);
|
|
else Result := inherited GetAsSqlText(field);
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -242,12 +241,7 @@ var esc_str : pchar;
|
|
begin
|
|
begin
|
|
if (not assigned(param)) or param.IsNull then Result := 'Null'
|
|
if (not assigned(param)) or param.IsNull then Result := 'Null'
|
|
else if param.DataType in [ftString,ftBlob,ftMemo] then
|
|
else if param.DataType in [ftString,ftBlob,ftMemo] then
|
|
- begin
|
|
|
|
- Getmem(esc_str,length(param.asstring)*2+1);
|
|
|
|
- mysql_real_escape_string(FMySQL,esc_str,pchar(param.asstring),length(param.asstring));
|
|
|
|
- Result := '''' + esc_str + '''';
|
|
|
|
- Freemem(esc_str);
|
|
|
|
- end
|
|
|
|
|
|
+ Result := '''' + EscapeString(Param.AsString) + ''''
|
|
else Result := inherited GetAsSqlText(Param);
|
|
else Result := inherited GetAsSqlText(Param);
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -309,6 +303,16 @@ begin
|
|
ReleaseMysql;
|
|
ReleaseMysql;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TConnectionName.EscapeString(const Str: string): string;
|
|
|
|
+
|
|
|
|
+var Len : integer;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+ SetLength(result,length(str)*2+1);
|
|
|
|
+ Len := mysql_real_escape_string(FMySQL,pchar(Result),pchar(Str),length(Str));
|
|
|
|
+ SetLength(result,Len);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TConnectionName.DoInternalConnect;
|
|
procedure TConnectionName.DoInternalConnect;
|
|
begin
|
|
begin
|
|
InitialiseMysql;
|
|
InitialiseMysql;
|
|
@@ -443,8 +447,12 @@ begin
|
|
NewType := ftLargeint;
|
|
NewType := ftLargeint;
|
|
NewSize := 0;
|
|
NewSize := 0;
|
|
end;
|
|
end;
|
|
- FIELD_TYPE_TINY, FIELD_TYPE_SHORT, FIELD_TYPE_LONG,
|
|
|
|
- FIELD_TYPE_INT24:
|
|
|
|
|
|
+ FIELD_TYPE_TINY, FIELD_TYPE_SHORT:
|
|
|
|
+ begin
|
|
|
|
+ NewType := ftSmallint;
|
|
|
|
+ NewSize := 0;
|
|
|
|
+ end;
|
|
|
|
+ FIELD_TYPE_LONG, FIELD_TYPE_INT24:
|
|
begin
|
|
begin
|
|
NewType := ftInteger;
|
|
NewType := ftInteger;
|
|
NewSize := 0;
|
|
NewSize := 0;
|
|
@@ -709,6 +717,7 @@ function TConnectionName.MySQLWriteData(AType: enum_field_types;ASize: Integer;
|
|
|
|
|
|
var
|
|
var
|
|
VI: Integer;
|
|
VI: Integer;
|
|
|
|
+ VS: Smallint;
|
|
VF: Double;
|
|
VF: Double;
|
|
VC: Currency;
|
|
VC: Currency;
|
|
VD: TDateTime;
|
|
VD: TDateTime;
|
|
@@ -721,8 +730,15 @@ begin
|
|
exit;
|
|
exit;
|
|
Src:=StrPas(Source);
|
|
Src:=StrPas(Source);
|
|
case AType of
|
|
case AType of
|
|
- FIELD_TYPE_TINY, FIELD_TYPE_SHORT, FIELD_TYPE_LONG,
|
|
|
|
- FIELD_TYPE_INT24:
|
|
|
|
|
|
+ FIELD_TYPE_TINY, FIELD_TYPE_SHORT:
|
|
|
|
+ begin
|
|
|
|
+ if (Src<>'') then
|
|
|
|
+ VS := StrToInt(Src)
|
|
|
|
+ else
|
|
|
|
+ VS := 0;
|
|
|
|
+ Move(VS, Dest^, SizeOf(smallint));
|
|
|
|
+ end;
|
|
|
|
+ FIELD_TYPE_LONG, FIELD_TYPE_INT24:
|
|
begin
|
|
begin
|
|
if (Src<>'') then
|
|
if (Src<>'') then
|
|
VI := StrToInt(Src)
|
|
VI := StrToInt(Src)
|
|
@@ -860,6 +876,16 @@ begin
|
|
FMySQL := Nil;
|
|
FMySQL := Nil;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TConnectionName.GetFieldNames(const TableName: string; List: TStrings);
|
|
|
|
+begin
|
|
|
|
+ GetDBInfo(stColumns,TableName,'field',List);
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure TConnectionName.GetTableNames(List: TStrings; SystemTables: Boolean);
|
|
|
|
+begin
|
|
|
|
+ GetDBInfo(stTables,'','tables_in_'+DatabaseName,List)
|
|
|
|
+end;
|
|
|
|
+
|
|
function TConnectionName.GetTransactionHandle(trans: TSQLHandle): pointer;
|
|
function TConnectionName.GetTransactionHandle(trans: TSQLHandle): pointer;
|
|
begin
|
|
begin
|
|
Result:=Nil;
|
|
Result:=Nil;
|
|
@@ -890,6 +916,18 @@ begin
|
|
// Do nothing
|
|
// Do nothing
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TConnectionName.GetSchemaInfoSQL(SchemaType: TSchemaType;
|
|
|
|
+ SchemaObjectName, SchemaPattern: string): string;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+ case SchemaType of
|
|
|
|
+ stTables : result := 'show tables';
|
|
|
|
+ stColumns : result := 'show columns from ' + EscapeString(SchemaObjectName);
|
|
|
|
+ else
|
|
|
|
+ DatabaseError(SMetadataUnavailable)
|
|
|
|
+ end; {case}
|
|
|
|
+end;
|
|
|
|
+
|
|
{ TMySQLConnectionDef }
|
|
{ TMySQLConnectionDef }
|
|
|
|
|
|
class function TMySQLConnectionDef.TypeName: String;
|
|
class function TMySQLConnectionDef.TypeName: String;
|