diff --git a/source/bineditor.pas b/source/bineditor.pas index 082d0fc8..5c610935 100644 --- a/source/bineditor.pas +++ b/source/bineditor.pas @@ -35,8 +35,8 @@ type procedure SetModified(NewVal: Boolean); property Modified: Boolean read FModified write SetModified; public - function GetText: WideString; - procedure SetText(text: WideString); + function GetText: String; + procedure SetText(text: String); procedure SetMaxLength(len: integer); procedure SetFont(font: TFont); end; @@ -48,12 +48,12 @@ implementation {$R *.dfm} -function TfrmBinEditor.GetText: WideString; +function TfrmBinEditor.GetText: String; begin Result := '0x' + memoText.Text; end; -procedure TfrmBinEditor.SetText(text: WideString); +procedure TfrmBinEditor.SetText(text: String); begin // Skip '0x'. memoText.Text := Copy(text, 3); diff --git a/source/connections.pas b/source/connections.pas index aab8a993..1ef92284 100644 --- a/source/connections.pas +++ b/source/connections.pas @@ -85,7 +85,7 @@ type FSessionNames: TStringlist; FSessionModified, FSessionAdded: Boolean; FOrgNetType: Byte; - FOrgHost, FOrgUser, FOrgPassword: WideString; + FOrgHost, FOrgUser, FOrgPassword: String; FOrgCompressed: Boolean; FOrgPort: Integer; FWidthListSessions: Byte; // Percentage values diff --git a/source/copytable.pas b/source/copytable.pas index cfda9fd9..9f58ebab 100644 --- a/source/copytable.pas +++ b/source/copytable.pas @@ -37,7 +37,7 @@ type procedure chkSelectAllClick(Sender: TObject); private { Private declarations } - oldTableName : WideString; + oldTableName : String; public { Public declarations } end; @@ -158,12 +158,12 @@ end; procedure TCopyTableForm.ButtonOKClick(Sender: TObject); var - strquery : WideString; + strquery : String; i,which,k : Integer; keylist : Array of TMyKey; - keystr : WideString; + keystr : String; notnull, - default : WideString; + default : String; Results : TMySQLQuery; isFulltext : Boolean; struc_data : Byte; diff --git a/source/createdatabase.pas b/source/createdatabase.pas index 1d897546..fd91ca06 100644 --- a/source/createdatabase.pas +++ b/source/createdatabase.pas @@ -26,7 +26,7 @@ type procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); - function GetCreateStatement: WideString; + function GetCreateStatement: String; private { Private declarations } CollationTable: TMySQLQuery; @@ -34,7 +34,7 @@ type currentCollation : String; public { Public declarations } - modifyDB : WideString; + modifyDB : String; end; @@ -63,7 +63,7 @@ procedure TCreateDatabaseForm.FormShow(Sender: TObject); var selectCharset, currentCharset, - sql_create : WideString; + sql_create : String; Charset: String; colpos: Integer; begin @@ -101,14 +101,14 @@ begin // Detect current charset and collation to be able to preselect them in the pulldowns sql_create := Mainform.Connection.GetVar('SHOW CREATE DATABASE '+Mainform.mask(modifyDB), 1); - currentCharset := Copy( sql_create, pos(WideString('CHARACTER SET'), sql_create)+14, Length(sql_create)); + currentCharset := Copy( sql_create, pos('CHARACTER SET', sql_create)+14, Length(sql_create)); currentCharset := GetFirstWord( currentCharset ); if currentCharset <> '' then selectCharset := currentCharset else selectCharset := defaultCharset; currentCollation := ''; - colpos := pos(WideString('COLLATE'), sql_create); + colpos := pos('COLLATE', sql_create); if colpos > 0 then begin currentCollation := Copy( sql_create, colpos+8, Length(sql_create)); currentCollation := GetFirstWord( currentCollation ); @@ -203,7 +203,7 @@ end; } procedure TCreateDatabaseForm.btnOKClick(Sender: TObject); var - sql : WideString; + sql : String; AllDatabases, Unions, ObjectsLeft: TWideStringList; ObjectsInNewDb, ObjectsInOldDb: TDBObjectList; i, j: Integer; @@ -315,7 +315,7 @@ end; {** Generate CREATE DATABASE statement, used for preview and execution } -function TCreateDatabaseForm.GetCreateStatement: WideString; +function TCreateDatabaseForm.GetCreateStatement: String; begin Result := 'CREATE DATABASE ' + Mainform.mask( editDBName.Text ); if comboCharset.Enabled and (comboCharset.Text <> '') then diff --git a/source/editvar.pas b/source/editvar.pas index f3b2f119..889766f3 100644 --- a/source/editvar.pas +++ b/source/editvar.pas @@ -20,7 +20,7 @@ type { Private declarations } public { Public declarations } - VarName, VarValue: WideString; + VarName, VarValue: String; end; implementation @@ -50,7 +50,7 @@ end; } procedure TfrmEditVariable.btnOKClick(Sender: TObject); var - sql: WideString; + sql: String; begin // Syntax taken from http://dev.mysql.com/doc/refman/4.1/en/using-system-variables.html sql := 'SET @@'; diff --git a/source/grideditlinks.pas b/source/grideditlinks.pas index 55ccd790..33f93de9 100644 --- a/source/grideditlinks.pas +++ b/source/grideditlinks.pas @@ -38,7 +38,7 @@ type function BeginEdit: Boolean; virtual; stdcall; function CancelEdit: Boolean; virtual; stdcall; function EndEdit: Boolean; virtual; stdcall; abstract; - function EndEditHelper(NewText: WideString): Boolean; + function EndEditHelper(NewText: String): Boolean; function GetBounds: TRect; virtual; stdcall; // Normally useless and unused procedure ProcessMessage(var Message: TMessage); stdcall; procedure SetBounds(R: TRect); virtual; stdcall; abstract; @@ -142,7 +142,7 @@ type procedure TextChange(Sender: TObject); public DefaultType: TColumnDefaultType; - DefaultText: WideString; + DefaultText: String; constructor Create(Tree: TVirtualStringTree); override; destructor Destroy; override; function BeginEdit: Boolean; override; @@ -176,8 +176,8 @@ type procedure SetBounds(R: TRect); override; end; -function GetColumnDefaultType(var Text: WideString): TColumnDefaultType; -function GetColumnDefaultClause(DefaultType: TColumnDefaultType; Text: WideString): WideString; +function GetColumnDefaultType(var Text: String): TColumnDefaultType; +function GetColumnDefaultClause(DefaultType: TColumnDefaultType; Text: String): String; implementation @@ -279,7 +279,7 @@ begin end; end; -function TBaseGridEditorLink.EndEditHelper(NewText: WideString): Boolean; +function TBaseGridEditorLink.EndEditHelper(NewText: String): Boolean; begin Result := not FStopping; if FStopping then Exit; @@ -501,7 +501,7 @@ end; function TDateTimeEditorLink.PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; stdcall; var MinColWidth: Integer; - CellText: WideString; + CellText: String; begin Result := inherited PrepareEdit(Tree, Node, Column); if not Result then @@ -788,7 +788,7 @@ end; function TSetEditorLink.EndEdit: Boolean; stdcall; var - newtext: WideString; + newtext: String; i: Integer; begin Result := not FStopping; @@ -908,7 +908,7 @@ end; function TInplaceEditorLink.EndEdit: Boolean; var - NewText: WideString; + NewText: String; begin Result := not FStopping; if FStopping then Exit; @@ -1133,7 +1133,7 @@ end; function TColumnDefaultEditorLink.EndEdit: Boolean; stdcall; var - newText: WideString; + newText: String; newDefaultType: TColumnDefaultType; begin Result := not FStopping; @@ -1190,14 +1190,14 @@ begin end; -function GetColumnDefaultType(var Text: WideString): TColumnDefaultType; +function GetColumnDefaultType(var Text: String): TColumnDefaultType; begin Result := TColumnDefaultType(MakeInt(Copy(Text, 1, 1))); Text := Copy(Text, 2, Length(Text)-1); end; -function GetColumnDefaultClause(DefaultType: TColumnDefaultType; Text: WideString): WideString; +function GetColumnDefaultClause(DefaultType: TColumnDefaultType; Text: String): String; begin case DefaultType of cdtNothing: Result := ''; @@ -1381,7 +1381,7 @@ end; procedure TDataTypeEditorLink.DoTreeSelectHotChange(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode); var R: TRect; - NodeText: WideString; + NodeText: String; bmp: TBitMap; begin // Display help box for hovered datatype diff --git a/source/helpers.pas b/source/helpers.pas index 9b14719f..9563ff23 100644 --- a/source/helpers.pas +++ b/source/helpers.pas @@ -31,25 +31,17 @@ type TFileCharset = (fcsAnsi, fcsUnicode, fcsUnicodeSwapped, fcsUtf8); - TUniClipboard = class(TClipboard) - private - procedure SetAsWideString(Value: WideString); - function GetAsWideString:WideString; - public - property AsWideString: WideString read GetAsWideString write SetAsWideString; - end; - // Structures for result grids, mapped from a TMySQLQuery to some handy VirtualTree structure TGridCell = record - Text: WideString; - NewText: WideString; // Used to create UPDATE clauses with needed columns + Text: String; + NewText: String; // Used to create UPDATE clauses with needed columns IsNull: Boolean; NewIsNull: Boolean; Modified: Boolean; end; PGridCell = ^TGridCell; TGridColumn = record - Name: WideString; + Name: String; Datatype: TDatatypeIndex; // @see mysql_structures.pas DatatypeCat: TDatatypeCategoryIndex; MaxLength: Cardinal; @@ -80,7 +72,7 @@ type end; TOrderCol = class(TObject) - ColumnName: WideString; + ColumnName: String; SortDirection: Byte; end; TOrderColArray = Array of TOrderCol; @@ -101,13 +93,13 @@ type // Column object, many of them in a TObjectList TTableColumn = class(TObject) - Name, OldName: WideString; + Name, OldName: String; DataType: TDatatype; - LengthSet: WideString; + LengthSet: String; Unsigned, AllowNull: Boolean; DefaultType: TColumnDefaultType; - DefaultText: WideString; - Comment, Collation: WideString; + DefaultText: String; + Comment, Collation: String; FStatus: TEditingStatus; constructor Create; destructor Destroy; override; @@ -119,7 +111,7 @@ type PTableColumn = ^TTableColumn; TTableKey = class(TObject) - Name, OldName: WideString; + Name, OldName: String; IndexType: String; Columns, SubParts: TWideStringlist; Modified, Added: Boolean; @@ -130,7 +122,7 @@ type // Helper object to manage foreign keys in a TObjectList TForeignKey = class(TObject) - KeyName, ReferenceTable, OnUpdate, OnDelete: WideString; + KeyName, ReferenceTable, OnUpdate, OnDelete: String; Columns, ForeignColumns: TWideStringList; Modified, Added: Boolean; constructor Create; @@ -142,11 +134,11 @@ type FModified: Boolean; procedure SetModified(Value: Boolean); protected - FEditObjectName: WideString; + FEditObjectName: String; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); virtual; + procedure Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); virtual; procedure DeInit; property Modified: Boolean read FModified write SetModified; procedure ApplyModifications; virtual; abstract; @@ -155,30 +147,29 @@ type {$I const.inc} - function implodestr(seperator: WideString; a: TWideStringList) :WideString; - function explode(separator, a: WideString) :TWideStringList; - procedure ExplodeQuotedList(Text: WideString; var List: TWideStringList); + function implodestr(seperator: String; a: TWideStringList) :String; + function explode(separator, a: String) :TWideStringList; + procedure ExplodeQuotedList(Text: String; var List: TWideStringList); procedure ensureValidIdentifier(name: String); - function getEnumValues(str: WideString): WideString; + function getEnumValues(str: String): String; function IsWhitespace(const c: WideChar): Boolean; function IsLetter(const c: WideChar): Boolean; function IsNumber(const c: WideChar): Boolean; - function parsesql(sql: WideString) : TWideStringList; - function sstr(str: WideString; len: Integer) : WideString; + function parsesql(sql: String) : TWideStringList; + function sstr(str: String; len: Integer) : String; function encrypt(str: String): String; function decrypt(str: String): String; - function htmlentities(str: WideString): WideString; - procedure GridToHtml(Grid: TVirtualStringTree; Title: WideString; S: TStream); + function htmlentities(str: String): String; + procedure GridToHtml(Grid: TVirtualStringTree; Title: String; S: TStream); procedure GridToCsv(Grid: TVirtualStringTree; Separator, Encloser, Terminator: String; S: TStream); - procedure GridToXml(Grid: TVirtualStringTree; root: WideString; S: TStream); - procedure GridToSql(Grid: TVirtualStringTree; Tablename: WideString; S: TStream); + procedure GridToXml(Grid: TVirtualStringTree; root: String; S: TStream); + procedure GridToSql(Grid: TVirtualStringTree; Tablename: String; S: TStream); function esc2ascii(str: String): String; - function StrCmpBegin(Str1, Str2: string): Boolean; function Max(A, B: Integer): Integer; assembler; function Min(A, B: Integer): Integer; assembler; function urlencode(url: String): String; - procedure StreamWrite(S: TStream; Text: WideString = ''); - function fixSQL( sql: WideString; sql_version: Integer = SQL_VERSION_ANSI; cli_workarounds: Boolean = false ): WideString; + procedure StreamWrite(S: TStream; Text: String = ''); + function fixSQL( sql: String; sql_version: Integer = SQL_VERSION_ANSI; cli_workarounds: Boolean = false ): String; procedure ToggleCheckListBox(list: TCheckListBox; state: Boolean); Overload; procedure ToggleCheckListBox(list: TCheckListBox; state: Boolean; list_toggle: TWideStringList); Overload; function _GetFileSize(filename: String): Int64; @@ -186,12 +177,12 @@ type function MakeInt( Str: String ) : Int64; function MakeFloat( Str: String ): Extended; function CleanupNumber(Str: String): String; - function esc(Text: WideString; ProcessJokerChars: Boolean=false): WideString; - function ScanNulChar(Text: WideString): Boolean; - function ScanLineBreaks(Text: WideString): TLineBreaks; - function RemoveNulChars(Text: WideString): WideString; + function esc(Text: String; ProcessJokerChars: Boolean=false): String; + function ScanNulChar(Text: String): Boolean; + function ScanLineBreaks(Text: String): TLineBreaks; + function RemoveNulChars(Text: String): String; procedure debug(txt: String); - function fixNewlines(txt: Widestring): Widestring; + function fixNewlines(txt: String): String; function GetShellFolder(CSIDL: integer): string; function getFilesFromDir( dir: String; pattern: String = '*.*'; hideExt: Boolean = false ): TStringList; function goodfilename( str: String ): String; @@ -202,7 +193,7 @@ type procedure setLocales; procedure ShellExec(cmd: String; path: String=''; params: String=''); function getFirstWord( text: String ): String; - function LastPos(needle: WideChar; haystack: WideString): Integer; + function LastPos(needle: WideChar; haystack: String): Integer; function FormatByteNumber( Bytes: Int64; Decimals: Byte = 1 ): String; Overload; function FormatByteNumber( Bytes: String; Decimals: Byte = 1 ): String; Overload; function FormatTimeNumber( Seconds: Cardinal ): String; @@ -210,20 +201,19 @@ type procedure SetVTSelection( VT: TVirtualStringTree; Selected: TWideStringList ); function GetTempDir: String; procedure SetWindowSizeGrip(hWnd: HWND; Enable: boolean); - procedure SaveUnicodeFile(Filename: String; Text: WideString); + procedure SaveUnicodeFile(Filename: String; Text: String); procedure OpenTextFile(const Filename: String; out Stream: TFileStream; out FileCharset: TFileCharset); function GetFileCharset(Stream: TFileStream): TFileCharset; - function ReadTextfileChunk(Stream: TFileStream; FileCharset: TFileCharset; ChunkSize: Int64 = 0): WideString; - function ReadTextfile(Filename: String): WideString; - function ReadBinaryFile(Filename: String; MaxBytes: Int64): string; - procedure CopyToClipboard(Value: WideString); + function ReadTextfileChunk(Stream: TFileStream; FileCharset: TFileCharset; ChunkSize: Int64 = 0): String; + function ReadTextfile(Filename: String): String; + function ReadBinaryFile(Filename: String; MaxBytes: Int64): AnsiString; procedure StreamToClipboard(S: TMemoryStream); - function WideHexToBin(text: WideString): AnsiString; - function BinToWideHex(bin: AnsiString): WideString; - procedure CheckHex(text: WideString; errorMessage: string); + function WideHexToBin(text: String): AnsiString; + function BinToWideHex(bin: AnsiString): String; + procedure CheckHex(text: String; errorMessage: string); procedure FixVT(VT: TVirtualStringTree); function ColorAdjustBrightness(Col: TColor; Shift: SmallInt; BestFit: Boolean): TColor; - function ComposeOrderClause(Cols: TOrderColArray): WideString; + function ComposeOrderClause(Cols: TOrderColArray): String; procedure OpenRegistry(Session: String = ''); function GetRegValue( valueName: String; defaultValue: Integer; Session: String = '' ) : Integer; Overload; function GetRegValue( valueName: String; defaultValue: Boolean; Session: String = '' ) : Boolean; Overload; @@ -231,15 +221,15 @@ type procedure DeInitializeVTNodes(Sender: TBaseVirtualTree); procedure EnableProgressBar(MaxValue: Integer); function CompareNumbers(List: TStringList; Index1, Index2: Integer): Integer; - function ListIndexByRegExpr(List: TStrings; Expression: WideString): Integer; + function ListIndexByRegExpr(List: TStrings; Expression: String): Integer; procedure SelectNode(VT: TVirtualStringTree; idx: Cardinal; ParentNode: PVirtualNode=nil); overload; procedure SelectNode(VT: TVirtualStringTree; Node: PVirtualNode); overload; function DateBackFriendlyCaption(d: TDateTime): String; procedure InheritFont(AFont: TFont); function GetLightness(AColor: TColor): Byte; - procedure ParseTableStructure(CreateTable: WideString; Columns: TObjectList=nil; Keys: TObjectList=nil; ForeignKeys: TObjectList=nil); - procedure ParseViewStructure(ViewName: WideString; Columns: TObjectList); - function ReformatSQL(SQL: WideString): WideString; + procedure ParseTableStructure(CreateTable: String; Columns: TObjectList=nil; Keys: TObjectList=nil; ForeignKeys: TObjectList=nil); + procedure ParseViewStructure(ViewName: String; Columns: TObjectList); + function ReformatSQL(SQL: String): String; var MainReg : TRegistry; @@ -273,25 +263,25 @@ var -function WideHexToBin(text: WideString): AnsiString; +function WideHexToBin(text: String): AnsiString; var buf: AnsiString; begin buf := AnsiString(text); - Result := StringOfChar(' ', Length(text) div 2); + SetLength(Result, Length(text) div 2); HexToBin(PAnsiChar(buf), @Result[1], Length(Result)); end; -function BinToWideHex(bin: AnsiString): WideString; +function BinToWideHex(bin: AnsiString): String; var buf: AnsiString; begin - buf := StringOfChar(' ', Length(bin) * 2); + SetLength(buf, Length(bin) * 2); BinToHex(@bin[1], PAnsiChar(buf), Length(bin)); - Result := buf; + Result := String(buf); end; -procedure CheckHex(text: WideString; errorMessage: string); +procedure CheckHex(text: String; errorMessage: string); const allowed: string = '0123456789abcdefABCDEF'; var @@ -313,7 +303,7 @@ end; @param a TStringList Containing strings @return string } -function implodestr(seperator: WideString; a: TWideStringList) :WideString; +function implodestr(seperator: String; a: TWideStringList) :String; var i : Integer; begin @@ -334,10 +324,10 @@ end; @param string Separator @return TStringList } -function explode(separator, a: WideString) :TWideStringList; +function explode(separator, a: String) :TWideStringList; var i : Integer; - item : WideString; + item : String; begin result := TWideStringList.Create; @@ -435,7 +425,7 @@ end; @param string Type definition, fx: enum('Y','N') @return string Content of brackets } -function getEnumValues(str: WideString): WideString; +function getEnumValues(str: String): String; var p1,p2 : Integer; begin @@ -460,7 +450,7 @@ end; @param string to enclose added string in (use %s) @return void } -procedure addResult(list: TWideStringList; s: WideString; enclose: WideString = ''); +procedure addResult(list: TWideStringList; s: String; enclose: String = ''); begin s := trim(s); if length(s) > 0 then begin @@ -513,7 +503,7 @@ end; Limitations: in case insensitive mode, input must be ANSI and lower case (for speed). Eligible for inlining, hope the compiler does this automatically. } -function scanReverse(const haystack: WideString; hayIndex: integer; const needle: WideString; needleEnd: integer; insensitive: boolean): boolean; +function scanReverse(const haystack: String; hayIndex: integer; const needle: String; needleEnd: integer; insensitive: boolean): boolean; var b: word; c: widechar; @@ -544,16 +534,16 @@ end; @param String SQL start delimiter @return TStringList Separated statements } -function parsesql(sql: WideString) : TWideStringList; +function parsesql(sql: String) : TWideStringList; var i, j, start, len : Integer; - tmp : WideString; + tmp : String; instring, backslash, incomment : Boolean; inconditional, condterminated : Boolean; inbigcomment, indelimiter : Boolean; delimiter_length : Integer; encloser, secchar, thdchar : WideChar; - conditional : WideString; + conditional : String; begin result := TWideStringList.Create; sql := trim(sql); @@ -596,7 +586,7 @@ begin if start = i then start := start + 1; i := i + 1; end; - if incomment and (not inbigcomment) and (sql[i] in [WideChar(#13), WideChar(#10)]) then begin + if incomment and (not inbigcomment) and CharInSet(sql[i], [#13, #10]) then begin incomment := false; end; if inbigcomment and (sql[i] + secchar = '*/') then begin @@ -618,7 +608,7 @@ begin end; // Avoid parsing stuff inside string literals. - if (sql[i] in [WideChar(''''), WideChar('"'), WideChar('`')]) and (not (backslash and instring)) and (not incomment) and (not indelimiter) then begin + if CharInSet(sql[i], ['''', '"', '`']) and (not (backslash and instring)) and (not incomment) and (not indelimiter) then begin if instring and (sql[i] = encloser) then begin if secchar = encloser then i := i + 1 // encoded encloser-char @@ -647,7 +637,7 @@ begin end; if indelimiter then begin - if (sql[i] in [WideChar(#13), WideChar(#10)]) or (i = len) then begin + if CharInSet(sql[i], [#13, #10]) or (i = len) then begin if (i = len) then j := 1 else j := 0; try Mainform.Delimiter := copy(sql, start + 10, i + j - (start + 10)); @@ -734,7 +724,7 @@ end; @param integer Wished Length of string @return string } -function sstr(str: WideString; len: Integer) : WideString; +function sstr(str: String; len: Integer) : String; begin if length(str) > len then begin @@ -806,7 +796,7 @@ end; @param string Text used for search+replace @return string Text with entities } -function htmlentities(str: WideString) : WideString; +function htmlentities(str: String) : String; begin result := WideStringReplace(str, '&', '&', [rfReplaceAll]); result := WideStringReplace(result, '<', '<', [rfReplaceAll]); @@ -828,10 +818,10 @@ end; @param Grid Object which holds data to export @param string Text used in } -procedure GridToHtml(Grid: TVirtualStringTree; Title: WideString; S: TStream); +procedure GridToHtml(Grid: TVirtualStringTree; Title: String; S: TStream); var i, MaxSize: Integer; - tmp, Data, Generator: WideString; + tmp, Data, Generator: String; Node: PVirtualNode; GridData: TGridResult; SelectionOnly: Boolean; @@ -967,7 +957,7 @@ end; procedure GridToCsv(Grid: TVirtualStringTree; Separator, Encloser, Terminator: String; S: TStream); var i, MaxSize: Integer; - tmp, Data: WideString; + tmp, Data: String; Node: PVirtualNode; GridData: TGridResult; SelectionOnly: Boolean; @@ -1062,10 +1052,10 @@ end; @param Grid Object which holds data to export @param string Text used as root-element } -procedure GridToXml(Grid: TVirtualStringTree; root: WideString; S: TStream); +procedure GridToXml(Grid: TVirtualStringTree; root: String; S: TStream); var i, MaxSize: Integer; - tmp, Data: WideString; + tmp, Data: String; Node: PVirtualNode; GridData: TGridResult; SelectionOnly: Boolean; @@ -1148,10 +1138,10 @@ end; @param Grid Object which holds data to export @param string Text used as tablename in INSERTs } -procedure GridToSql(Grid: TVirtualStringTree; Tablename: WideString; S: TStream); +procedure GridToSql(Grid: TVirtualStringTree; Tablename: String; S: TStream); var i, MaxSize: Integer; - tmp, Data: WideString; + tmp, Data: String; Node: PVirtualNode; GridData: TGridResult; SelectionOnly: Boolean; @@ -1279,25 +1269,6 @@ asm end; - -{*** - Left hand string-comparison - - @param string Text 1 to compare - @param string Text 2 to compare - @return boolean Does the longer string of both contain the shorter string at the beginning? -} -function StrCmpBegin(Str1, Str2: string): Boolean; -begin - if ((Str1 = '') or (Str2 = '')) and (Str1 <> Str2) then - Result := False - else - Result := (StrLComp(PChar(Str1), PChar(Str2), - Min(Length(Str1), Length(Str2))) = 0); -end; - - - {*** Encode spaces (and more to come) in URLs @@ -1313,7 +1284,7 @@ end; {** Write some UTF8 text to a file- or memorystream } -procedure StreamWrite(S: TStream; Text: WideString = ''); +procedure StreamWrite(S: TStream; Text: String = ''); var utf8: AnsiString; begin @@ -1338,7 +1309,7 @@ end; @param integer MySQL-version or SQL_VERSION_ANSI @return string SQL } -function fixSQL( sql: WideString; sql_version: Integer = SQL_VERSION_ANSI; cli_workarounds: Boolean = false ): WideString; +function fixSQL( sql: String; sql_version: Integer = SQL_VERSION_ANSI; cli_workarounds: Boolean = false ): String; var rx : TRegExpr; begin @@ -1542,7 +1513,7 @@ begin Result := ''; HasDecimalSep := False; for i:=1 to Length(Str) do begin - if (Str[i] in ['0'..'9', DecimalSeparator]) or ((Str[i] = '-') and (Result='')) then + if CharInSet(Str[i], ['0'..'9', DecimalSeparator]) or ((Str[i] = '-') and (Result='')) then begin // Avoid confusion and AV in StrToFloat() if (ThousandSeparator = DecimalSeparator) and (Str[i] = DecimalSeparator) then @@ -1595,7 +1566,7 @@ begin end; -function esc(Text: WideString; ProcessJokerChars: Boolean=false): WideString; +function esc(Text: String; ProcessJokerChars: Boolean=false): String; begin Result := Mainform.Connection.EscapeString(Text, ProcessJokerChars); end; @@ -1605,7 +1576,7 @@ end; Detect NUL character in a text. Useful because fx SynEdit cuts of all text after it encounters a NUL. } -function ScanNulChar(Text: WideString): boolean; +function ScanNulChar(Text: String): boolean; var i: integer; begin @@ -1630,7 +1601,7 @@ end; @param string Text to test @return TLineBreaks } -function ScanLineBreaks(Text: WideString): TLineBreaks; +function ScanLineBreaks(Text: String): TLineBreaks; var i: integer; c: WideChar; @@ -1675,7 +1646,7 @@ end; @param string Text to test @return Boolean } -function RemoveNulChars(Text: WideString): WideString; +function RemoveNulChars(Text: String): String; var i: integer; c: WideChar; @@ -1716,7 +1687,7 @@ end; @param string Text to fix @return string } -function fixNewlines(txt: Widestring): WideString; +function fixNewlines(txt: String): String; begin txt := WidestringReplace(txt, CRLF, #10, [rfReplaceAll]); txt := WidestringReplace(txt, #13, #10, [rfReplaceAll]); @@ -1927,7 +1898,7 @@ end; function getFirstWord( text: String ): String; var i : Integer; - wordChars, wordCharsFirst : Set of Char; + wordChars, wordCharsFirst : TSysCharSet; begin result := ''; text := trim( text ); @@ -1943,7 +1914,7 @@ begin // @see bug #1692828 while i < Length(text) do begin - if (text[i] in wordCharsFirst) then + if CharInSet(text[i], wordCharsFirst) then begin // Found beginning of word! break; @@ -1961,7 +1932,7 @@ begin // Add chars as long as they're alpha-numeric while i <= Length(text) do begin - if ((result = '') and (text[i] in wordCharsFirst)) or (text[i] in wordChars) then + if ((result = '') and CharInSet(text[i], wordCharsFirst)) or CharInSet(text[i], wordChars) then begin result := result + text[i]; end @@ -1982,9 +1953,9 @@ end; @param string Text @return Integer Last position } -function LastPos(needle: WideChar; haystack: WideString): Integer; +function LastPos(needle: WideChar; haystack: String): Integer; var - reverse: WideString; + reverse: String; i, len, w: Integer; begin // Reverse string. @@ -2256,7 +2227,7 @@ end; {** Save a textfile with unicode } -procedure SaveUnicodeFile(Filename: String; Text: WideString); +procedure SaveUnicodeFile(Filename: String; Text: String); var f: TFileStream; begin @@ -2432,7 +2403,7 @@ end; {** Read a chunk out of a textfile unicode safe by passing a stream and its charset } -function ReadTextfileChunk(Stream: TFileStream; FileCharset: TFileCharset; ChunkSize: Int64 = 0): WideString; +function ReadTextfileChunk(Stream: TFileStream; FileCharset: TFileCharset; ChunkSize: Int64 = 0): String; var SA: AnsiString; P: PWord; @@ -2460,19 +2431,19 @@ begin // BOM indicates UTF-8 text stream SetLength(SA, ChunkSize div SizeOf(AnsiChar)); Stream.Read(PAnsiChar(SA)^, ChunkSize); - Result := UTF8Decode(SA); + Result := UTF8ToString(SA); end else begin // without byte order mark it is assumed that we are loading ANSI text SetLength(SA, ChunkSize div SizeOf(AnsiChar)); Stream.Read(PAnsiChar(SA)^, ChunkSize); - Result := SA; + Result := String(SA); end; end; {** Read a unicode or ansi file into memory } -function ReadTextfile(Filename: String): WideString; +function ReadTextfile(Filename: String): String; var Stream: TFileStream; FileCharset: TFileCharset; @@ -2482,7 +2453,7 @@ begin Stream.Free; end; -function ReadBinaryFile(Filename: String; MaxBytes: Int64): string; +function ReadBinaryFile(Filename: String; MaxBytes: Int64): AnsiString; var Stream: TFileStream; begin @@ -2490,50 +2461,19 @@ begin Stream.Position := 0; if (MaxBytes < 1) or (MaxBytes > Stream.Size) then MaxBytes := Stream.Size; SetLength(Result, MaxBytes); - Stream.Read(PChar(Result)^, Length(Result)); + Stream.Read(PAnsiChar(Result)^, Length(Result)); Stream.Free; end; -{ TUniClipboard } - -function TUniClipboard.GetAsWideString: WideString; -var Data: THandle; -begin - Open; - Data := GetClipboardData(CF_UNICODETEXT); - try - if Data <> 0 then - Result := PWideChar(GlobalLock(Data)) - else - Result := ''; - finally - if Data <> 0 then GlobalUnlock(Data); - Close; - end; -end; - -procedure TUniClipboard.SetAsWideString(Value: WideString); -begin - SetBuffer(CF_UNICODETEXT, PWideChar(Value)^, 2 * (Length(Value) + 1)); -end; - -procedure CopyToClipboard(Value: WideString); -var - CB: TUniClipboard; -begin - CB := TUniClipboard.Create; - CB.AsWideString := Value; -end; - procedure StreamToClipboard(S: TMemoryStream); var - Content: String; + Content: AnsiString; begin SetLength(Content, S.Size); S.Position := 0; - S.Read(Pointer(Content)^, S.Size); - CopyToClipboard(Utf8Decode(Content)); + S.Read(PAnsiChar(Content)^, S.Size); + Clipboard.AsText := Utf8ToString(Content); // Free memory SetString(Content, nil, 0); end; @@ -2595,7 +2535,7 @@ end; {** Concat all sort options to a ORDER clause } -function ComposeOrderClause(Cols: TOrderColArray): WideString; +function ComposeOrderClause(Cols: TOrderColArray): String; var i : Integer; sort : String; @@ -2711,7 +2651,7 @@ begin end; -function ListIndexByRegExpr(List: TStrings; Expression: WideString): Integer; +function ListIndexByRegExpr(List: TStrings; Expression: String): Integer; var rx: TRegExpr; i: Integer; @@ -2780,12 +2720,12 @@ begin end; -procedure ExplodeQuotedList(Text: WideString; var List: TWideStringList); +procedure ExplodeQuotedList(Text: String; var List: TWideStringList); var i: Integer; Quote: WideChar; Opened, Closed: Boolean; - Item: WideString; + Item: String; begin Text := Trim(Text); if Length(Text) > 0 then @@ -2834,9 +2774,9 @@ begin end; -procedure ParseTableStructure(CreateTable: WideString; Columns: TObjectList=nil; Keys: TObjectList=nil; ForeignKeys: TObjectList=nil); +procedure ParseTableStructure(CreateTable: String; Columns: TObjectList=nil; Keys: TObjectList=nil; ForeignKeys: TObjectList=nil); var - ColSpec: WideString; + ColSpec: String; rx, rxCol: TRegExpr; i: Integer; InLiteral: Boolean; @@ -3024,7 +2964,7 @@ begin end; -procedure ParseViewStructure(ViewName: WideString; Columns: TObjectList); +procedure ParseViewStructure(ViewName: String; Columns: TObjectList); var rx: TRegExpr; Col: TTableColumn; @@ -3051,13 +2991,13 @@ begin end; -function ReformatSQL(SQL: WideString): WideString; +function ReformatSQL(SQL: String): String; var AllKeywords, ImportantKeywords: TWideStringlist; i, Run, KeywordMaxLen: Integer; IsEsc, IsQuote, InComment, InBigComment, InString, InKeyword, InIdent, LastWasComment: Boolean; c, p: WideChar; - Keyword, PreviousKeyword, TestPair: WideString; + Keyword, PreviousKeyword, TestPair: String; begin // Known SQL keywords, get converted to UPPERCASE AllKeywords := TWideStringlist.Create; @@ -3240,7 +3180,7 @@ begin FModified := Value; end; -procedure TDBObjectEditor.Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); +procedure TDBObjectEditor.Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); begin DeInit; Mainform.showstatus('Initializing editor ...'); @@ -3252,7 +3192,7 @@ end; procedure TDBObjectEditor.DeInit; var - Msg, ObjType: WideString; + Msg, ObjType: String; begin // Ask for saving modifications if Modified then begin diff --git a/source/insertfiles.pas b/source/insertfiles.pas index 51d10c85..fa7a76d1 100644 --- a/source/insertfiles.pas +++ b/source/insertfiles.pas @@ -354,9 +354,9 @@ var dt: TDateTime; y, m, d, h, mi, s, ms: Word; FileStream: TFileStream; - readBuf: String; + readBuf: AnsiString; bytesRead: Integer; - sql, data: WideString; + sql, data: String; begin Screen.Cursor := crHourglass; EnableProgressBar(ListViewFiles.Items.Count); @@ -389,7 +389,7 @@ begin // TODO: Indicate this character set on the GUI. // SetLength(readBuf, ChunkSize div SizeOf(Char)); - bytesRead := FileStream.Read(PChar(readBuf)^, ChunkSize); + bytesRead := FileStream.Read(PAnsiChar(readBuf)^, ChunkSize); SetLength(readBuf, bytesRead div SizeOf(Char)); data := data + BinToWideHex(readBuf); end; diff --git a/source/loaddata.pas b/source/loaddata.pas index 0bd330db..e464ba47 100644 --- a/source/loaddata.pas +++ b/source/loaddata.pas @@ -138,7 +138,7 @@ procedure Tloaddataform.comboDatabaseChange(Sender: TObject); var count, i, selCharsetIndex, v: Integer; DBObjects: TDBObjectList; - seldb, seltable, dbcreate: WideString; + seldb, seltable, dbcreate: String; rx: TRegExpr; DefCharset: String; CharsetTable: TMySQLQuery; @@ -212,7 +212,7 @@ end; procedure Tloaddataform.btnImportClick(Sender: TObject); var - query : WideString; + query : String; col : TWideStringList; i : Integer; diff --git a/source/main.pas b/source/main.pas index 6ad40405..b03f659e 100644 --- a/source/main.pas +++ b/source/main.pas @@ -39,7 +39,7 @@ type Grid: TVirtualStringTree; TabSheet: TTabSheet; GridResult: TGridResult; - FilterText: WideString; + FilterText: String; end; TMainForm = class(TForm) @@ -476,7 +476,7 @@ type procedure actPrintListExecute(Sender: TObject); procedure actCopyTableExecute(Sender: TObject); procedure showstatus(msg: string=''; panel: Integer=6); - function mask(str: WideString) : WideString; + function mask(str: String) : String; procedure actExecuteQueryExecute(Sender: TObject); procedure actExecuteSelectionExecute(Sender: TObject); procedure actCopyAsXMLExecute(Sender: TObject); @@ -539,16 +539,16 @@ type procedure ValidateControls(Sender: TObject); procedure ValidateQueryControls(Sender: TObject); procedure RefreshQueryHelpers; - procedure LoadDatabaseProperties(db: WideString); + procedure LoadDatabaseProperties(db: String); procedure ShowHost; - procedure ShowDatabase(db: WideString); - procedure ShowDBProperties(db: WideString); + procedure ShowDatabase(db: String); + procedure ShowDBProperties(db: String); function EnsureFullWidth(Grid: TBaseVirtualTree; Column: TColumnIndex; Node: PVirtualNode): Boolean; - procedure EnsureNodeLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode; WhereClause: WideString); + procedure EnsureNodeLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode; WhereClause: String); procedure EnsureChunkLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode; FullWidth: Boolean = False); procedure DiscardNodeData(Sender: TVirtualStringTree; Node: PVirtualNode); procedure viewdata(Sender: TObject); - procedure LogSQL(Msg: WideString; Category: TMySQLLogCategory=lcInfo); + procedure LogSQL(Msg: String; Category: TMySQLLogCategory=lcInfo); procedure KillProcess(Sender: TObject); procedure ExecSQLClick(Sender: TObject; Selection: Boolean = false; CurrentLine: Boolean=false); @@ -724,7 +724,7 @@ type SelectedTableKeys, SelectedTableForeignKeys : TObjectList; FilterPanelManuallyOpened : Boolean; - DataGridDB, DataGridTable : WideString; + DataGridDB, DataGridTable : String; PrevTableColWidths : TWideStringList; DataGridHasChanges : Boolean; FLastMouseUpOnPageControl : Cardinal; @@ -733,25 +733,25 @@ type DataGridResult : TGridResult; // Filter text per tab for filter panel FilterTextVariables, FilterTextStatus, FilterTextProcessList, FilterTextCommandStats, - FilterTextDatabase, FilterTextData: WideString; + FilterTextDatabase, FilterTextData: String; PreviousFocusedNode: PVirtualNode; function GetParamValue(const paramChar: Char; const paramName: string; var curIdx: Byte; out paramValue: string): Boolean; procedure SetDelimiter(Value: String); procedure DisplayRowCountStats(MatchingRows: Int64 = -1); procedure insertFunction(Sender: TObject); - function GetActiveDatabase: WideString; + function GetActiveDatabase: String; function GetSelectedTable: TDBObject; - procedure SetSelectedDatabase(db: WideString); + procedure SetSelectedDatabase(db: String); procedure SetVisibleListColumns( List: TVirtualStringTree; Columns: TWideStringList ); procedure ToggleFilterPanel(ForceVisible: Boolean = False); procedure AutoCalcColWidths(Tree: TVirtualStringTree; PrevLayout: TWideStringlist = nil); function PlaceObjectEditor(Which: TListNodeType): TDBObjectEditor; - procedure SetTabCaption(PageIndex: Integer; Text: WideString); + procedure SetTabCaption(PageIndex: Integer; Text: String); function ConfirmTabClose(PageIndex: Integer): Boolean; procedure SaveQueryMemo(Tab: TQueryTab; Filename: String; OnlySelection: Boolean); procedure UpdateFilterPanel(Sender: TObject); - procedure DatabaseChanged(Database: WideString); + procedure DatabaseChanged(Database: String); public Connection: TMySQLConnection; cancelling: Boolean; @@ -766,7 +766,7 @@ type OptionsForm: Toptionsform; SessionManager: TConnForm; AllDatabases, Databases: TWideStringList; - TemporaryDatabase : WideString; + TemporaryDatabase : String; dataselected : Boolean; editing : Boolean; WindowNumber : Integer; @@ -784,7 +784,7 @@ type prefMaxTotalRows : Integer; prefCSVSeparator, prefCSVEncloser, - prefCSVTerminator : String[10]; + prefCSVTerminator : String; prefLogToFile, prefEnableBinaryEditor, prefEnableDatetimeEditor, @@ -805,10 +805,10 @@ type DataGridCurrentFullSelect, DataGridCurrentFrom, DataGridCurrentFilter, - DataGridCurrentSort : WideString; + DataGridCurrentSort : String; btnAddTab : TPngSpeedButton; QueryTabs : TObjectList; - SelectedTableCreateStatement: WideString; + SelectedTableCreateStatement: String; property Delimiter: String read FDelimiter write SetDelimiter; procedure CallSQLHelpWithKeyword( keyword: String ); @@ -818,13 +818,13 @@ type procedure FillPopupQueryLoad; procedure PopupQueryLoadRemoveAbsentFiles( sender: TObject ); procedure SessionConnect(Sender: TObject); - function InitConnection(parHost, parSocketname, parPort, parUser, parPass, parCompress, parSession: WideString): Boolean; + function InitConnection(parHost, parSocketname, parPort, parUser, parPass, parCompress, parSession: String): Boolean; function ActiveGrid: TVirtualStringTree; function GridResult(Grid: TBaseVirtualTree): TGridResult; overload; function GridResult(PageIndex: Integer): TGridResult; overload; - property ActiveDatabase : WideString read GetActiveDatabase write SetSelectedDatabase; + property ActiveDatabase : String read GetActiveDatabase write SetSelectedDatabase; property SelectedTable : TDBObject read GetSelectedTable; procedure TestVTreeDataArray( P: PVTreeDataArray ); @@ -834,15 +834,15 @@ type procedure TrimSQLLog; function GetTreeNodeType(Tree: TBaseVirtualTree; Node: PVirtualNode): TListNodeType; function GetFocusedTreeNodeType: TListNodeType; - procedure RefreshTree(DoResetTableCache: Boolean; SelectDatabase: WideString = ''); - procedure RefreshTreeDB(db: WideString); - function FindDBNode(db: WideString): PVirtualNode; + procedure RefreshTree(DoResetTableCache: Boolean; SelectDatabase: String = ''); + procedure RefreshTreeDB(db: String); + function FindDBNode(db: String): PVirtualNode; function GridPostUpdate(Sender: TBaseVirtualTree): Boolean; function GridPostInsert(Sender: TBaseVirtualTree): Boolean; function GridPostDelete(Sender: TBaseVirtualTree): Boolean; function DataGridPostUpdateOrInsert(Node: PVirtualNode): Boolean; procedure GridFinalizeEditing(Sender: TBaseVirtualTree); - function GetWhereClause(Row: PGridRow; Columns: PGridColumns): WideString; + function GetWhereClause(Row: PGridRow; Columns: PGridColumns): String; function GetKeyColumns: TWideStringlist; function CheckUniqueKeyClause: Boolean; procedure DataGridInsertRow(CopyValuesFromNode: PVirtualNode); @@ -852,11 +852,11 @@ type function GetRegKeyTable: String; procedure SaveListSetup( List: TVirtualStringTree ); procedure RestoreListSetup( List: TVirtualStringTree ); - procedure SetEditorTabCaption(Editor: TDBObjectEditor; ObjName: WideString); + procedure SetEditorTabCaption(Editor: TDBObjectEditor; ObjName: String); procedure SetWindowCaption; procedure OnMessageHandler(var Msg: TMsg; var Handled: Boolean); - function MaskMulti(str: WideString): WideString; - procedure SelectDBObject(Text: WideString; NodeType: TListNodeType); + function MaskMulti(str: String): String; + procedure SelectDBObject(Text: String; NodeType: TListNodeType); procedure SetupSynEditors; procedure ParseSelectedTableStructure; end; @@ -1541,7 +1541,7 @@ end; procedure TMainForm.DoAfterConnect; var i, j: Integer; - lastUsedDB: WideString; + lastUsedDB: String; functioncats : TStringList; miGroup, miFilterGroup, @@ -1562,7 +1562,7 @@ begin Mainreg.WriteInteger(REGNAME_SERVERVERSION, Connection.ServerVersionInt); Mainreg.WriteString(REGNAME_LASTCONNECT, DateTimeToStr(Now)); - comboOnlyDBs.Items.Text := Utf8Decode(GetRegValue(REGNAME_ONLYDBS, '', SessionName)); + comboOnlyDBs.Items.Text := GetRegValue(REGNAME_ONLYDBS, '', SessionName); if comboOnlyDBs.Items.Count > 0 then comboOnlyDBs.ItemIndex := 0 else @@ -1575,7 +1575,7 @@ begin // Reselect last used database if GetRegValue( REGNAME_RESTORELASTUSEDDB, DEFAULT_RESTORELASTUSEDDB ) then begin - lastUsedDB := Utf8Decode(GetRegValue(REGNAME_LASTUSEDDB, '', SessionName)); + lastUsedDB := GetRegValue(REGNAME_LASTUSEDDB, '', SessionName); if lastUsedDB <> '' then try ActiveDatabase := lastUsedDB; except @@ -1647,8 +1647,8 @@ begin // Open server-specific registry-folder. // relative from already opened folder! OpenRegistry(SessionName); - MainReg.WriteString( REGNAME_LASTUSEDDB, Utf8Encode(ActiveDatabase) ); - MainReg.WriteString( REGNAME_ONLYDBS, Utf8Encode(comboOnlyDBs.Items.Text) ); + MainReg.WriteString( REGNAME_LASTUSEDDB, ActiveDatabase ); + MainReg.WriteString( REGNAME_ONLYDBS, comboOnlyDBs.Items.Text ); // Post pending UPDATE if DataGridHasChanges then @@ -1908,14 +1908,14 @@ end; // Escape database, table, field, index or key name. -function TMainform.mask(str: WideString) : WideString; +function TMainform.mask(str: String) : String; begin result := Connection.QuoteIdent(str); end; // Quote identifier, probably with multiple segments, e.g. db.table.column -function TMainform.MaskMulti(str: WideString): WideString; +function TMainform.MaskMulti(str: String): String; var Segments: TWideStringlist; i: Integer; @@ -1981,7 +1981,7 @@ end; procedure TMainForm.actCopyAsHTMLExecute(Sender: TObject); var S: TMemoryStream; - Title: WideString; + Title: String; begin // Copy data in focused grid as HTML table Screen.Cursor := crHourglass; @@ -2003,7 +2003,7 @@ end; procedure TMainForm.actCopyAsXMLExecute(Sender: TObject); var S: TMemoryStream; - Root: WideString; + Root: String; begin // Copy data in focused grid as XML Screen.Cursor := crHourglass; @@ -2025,7 +2025,7 @@ end; procedure TMainForm.actCopyAsSQLExecute(Sender: TObject); var S: TMemoryStream; - Tablename: WideString; + Tablename: String; begin // Copy data in focused grid as SQL Screen.Cursor := crHourglass; @@ -2048,7 +2048,7 @@ procedure TMainForm.actExportDataExecute(Sender: TObject); var Dialog: TSaveDialog; FS: TFileStream; - Title: WideString; + Title: String; begin // Save data in current dataset as CSV, HTML or XML Dialog := SaveDialogExportData; @@ -2089,7 +2089,7 @@ var g : TVirtualStringTree; filename : String; f : Textfile; - Header, Content : String; + Header, Content : AnsiString; IsBinary : Boolean; SaveBinary : Boolean; begin @@ -2108,10 +2108,10 @@ begin end else if IsBinary and (Copy(Header, 2, 3) = 'PNG') then begin SaveBinary := true; filename := filename + 'png'; - end else if IsBinary and StrCmpBegin('GIF', Header) then begin + end else if IsBinary and (Copy(Header, 1, 3) = 'GIF') then begin SaveBinary := true; filename := filename + 'gif'; - end else if IsBinary and StrCmpBegin('BM', Header) then begin + end else if IsBinary and (Copy(Header, 1, 2) = 'BM') then begin SaveBinary := true; filename := filename + 'bmp'; end; @@ -2147,7 +2147,7 @@ procedure TMainForm.actDropObjectsExecute(Sender: TObject); var AllCount : Integer; Tables, Views, Functions, Procedures, Triggers: TWideStringList; - msg, activeDB : WideString; + msg, activeDB : String; InDBTree: Boolean; Act: TAction; Node: PVirtualNode; @@ -2155,7 +2155,7 @@ var procedure DoDrop(Kind: String; List: TWideStringlist; MultiDrops: Boolean); var i: Integer; - baseSql, sql: WideString; + baseSql, sql: String; begin if List.Count > 0 then begin baseSql := 'DROP '+Kind+' '; @@ -2326,7 +2326,7 @@ procedure TMainForm.SessionConnect(Sender: TObject); var Session: String; NetType: Integer; - parHost, parSocketname, parPort, parUser, parPass, parCompress: WideString; + parHost, parSocketname, parPort, parUser, parPass, parCompress: String; begin Session := (Sender as TMenuItem).Caption; NetType := GetRegValue(REGNAME_NETTYPE, NETTYPE_TCPIP, Session); @@ -2350,7 +2350,7 @@ end; Receive connection parameters and create the mdi-window Paremeters are either sent by connection-form or by commandline. } -function TMainform.InitConnection(parHost, parSocketname, parPort, parUser, parPass, parCompress, parSession: WideString): Boolean; +function TMainform.InitConnection(parHost, parSocketname, parPort, parUser, parPass, parCompress, parSession: String): Boolean; var ConnectionAttempt: TMySQLConnection; SessionExists: Boolean; @@ -2633,7 +2633,7 @@ end; procedure TMainForm.SaveQueryMemo(Tab: TQueryTab; Filename: String; OnlySelection: Boolean); var - Text, LB: WideString; + Text, LB: String; begin Screen.Cursor := crHourGlass; if OnlySelection then @@ -2660,7 +2660,7 @@ procedure TMainForm.actSaveSQLSnippetExecute(Sender: TObject); var snippetname : String; mayChange : Boolean; - Text, LB: WideString; + Text, LB: String; begin // Save snippet if InputQuery( 'Save snippet', 'Snippet name:', snippetname) then @@ -2978,7 +2978,7 @@ begin // Recreate recent filters list Filters := TStringList.Create; OldNumbers := TStringList.Create; - Filters.Add(Trim(Utf8Encode(SynMemoFilter.Text))); + Filters.Add(Trim(SynMemoFilter.Text)); MainReg.OpenKey(GetRegKeyTable+'\'+REGNAME_FILTERS, True); MainReg.GetValueNames(OldNumbers); OldNumbers.CustomSort(CompareNumbers); @@ -3075,7 +3075,7 @@ end; {** Add a SQL-command or comment to SynMemoSQLLog } -procedure TMainForm.LogSQL(Msg: WideString; Category: TMySQLLogCategory=lcInfo); +procedure TMainForm.LogSQL(Msg: String; Category: TMySQLLogCategory=lcInfo); var snip, IsSQL: Boolean; begin @@ -3152,7 +3152,7 @@ begin end; -procedure TMainForm.ShowDatabase(db: WideString); +procedure TMainForm.ShowDatabase(db: String); begin if (not DBtree.Dragging) and ( (PageControlMain.ActivePage = tabHost) or @@ -3173,7 +3173,7 @@ var i, j : Integer; select_base, select_base_full, - select_from : WideString; + select_from : String; sl_query : TWideStringList; KeyCols : TWideStringList; col : TVirtualTreeColumn; @@ -3416,7 +3416,7 @@ procedure TMainForm.DisplayRowCountStats(MatchingRows: Int64); var DBObject: TDBObject; IsFiltered: Boolean; - cap: WideString; + cap: String; begin DBObject := SelectedTable; cap := ActiveDatabase + '.' + DBObject.Name; @@ -3491,7 +3491,7 @@ begin end; -procedure TMainForm.LoadDatabaseProperties(db: WideString); +procedure TMainForm.LoadDatabaseProperties(db: String); var i, img : Integer; Obj: TDBObject; @@ -3573,7 +3573,7 @@ end; { Show tables and their properties on the tabsheet "Database" } -procedure TMainForm.ShowDBProperties(db: WideString); +procedure TMainForm.ShowDBProperties(db: String); begin Screen.Cursor := crHourglass; PageControlMainChange(Self); @@ -3659,7 +3659,7 @@ procedure TMainForm.ValidateQueryControls(Sender: TObject); var NotEmpty, HasSelection: Boolean; Tab: TQueryTab; - cap: WideString; + cap: String; InQueryTab: Boolean; begin InQueryTab := QueryTabActive; @@ -3731,7 +3731,7 @@ var i, j, QueryCount: Integer; SQLTime, SQLNetTime: Cardinal; Results: TMySQLQuery; - ColName, Text, LB: WideString; + ColName, Text, LB: String; col: TVirtualTreeColumn; ResultLabel: TLabel; ActiveGridResult: TGridResult; @@ -3844,7 +3844,7 @@ begin for j:=0 to Results.ColumnCount-1 do begin case ActiveGridResult.Columns[j].DatatypeCat of dtcInteger, dtcReal: ActiveGridResult.Rows[i].Cells[j].Text := FormatNumber(Results.Col(j), False); - dtcBinary: ActiveGridResult.Rows[i].Cells[j].Text := '0x' + BinToWideHex(Results.Col(j)); + dtcBinary: ActiveGridResult.Rows[i].Cells[j].Text := '0x' + BinToWideHex(Results.ColAsAnsi(j)); else ActiveGridResult.Rows[i].Cells[j].Text := Results.Col(j); end; ActiveGridResult.Rows[i].Cells[j].IsNull := Results.IsNull(j); @@ -3892,9 +3892,9 @@ var i,j : Integer; Results : TMySQLQuery; DBObjects : TDBObjectList; - sql, TableClauses: WideString; + sql, TableClauses: String; Tables : TStringList; - tablename : WideString; + tablename : String; rx : TRegExpr; PrevShortToken, PrevLongToken, @@ -3921,9 +3921,9 @@ var Proposal.ItemList.Add( WideFormat(SYNCOMPLETION_PATTERN, [Icon, LowerCase(Obj.ObjType), Obj.Name]) ); end; - procedure addColumns( tablename: WideString ); + procedure addColumns( tablename: String ); var - dbname : WideString; + dbname : String; Columns: TMySQLQuery; begin dbname := ActiveDatabase; @@ -4200,7 +4200,7 @@ end; } procedure TMainForm.QuickFilterClick(Sender: TObject); var - filter,value,column : WideString; + filter,value,column : String; menuitem : TMenuItem; IsNull: Boolean; begin @@ -4350,7 +4350,7 @@ procedure TMainForm.SynMemoQueryDragDrop(Sender, Source: TObject; X, Y: Integer); var src : TControl; - Text : WideString; + Text : String; LoadText : Boolean; i: Integer; begin @@ -4493,7 +4493,7 @@ end; procedure TMainForm.QueryLoad( filename: String; ReplaceContent: Boolean = true ); var - filecontent : WideString; + filecontent : String; msgtext : String; LineBreaks : TLineBreaks; begin @@ -4674,7 +4674,7 @@ begin end; -function TMainForm.GetActiveDatabase: WideString; +function TMainForm.GetActiveDatabase: String; var s: PVirtualNode; begin @@ -4726,7 +4726,7 @@ begin end; -procedure TMainForm.SelectDBObject(Text: WideString; NodeType: TListNodeType); +procedure TMainForm.SelectDBObject(Text: String; NodeType: TListNodeType); var dbnode, tnode, snode: PVirtualNode; begin @@ -4774,12 +4774,12 @@ begin end; -procedure TMainForm.SetSelectedDatabase(db: WideString); +procedure TMainForm.SetSelectedDatabase(db: String); var n, f: PVirtualNode; i: Integer; DBObjects: TDBObjectList; - Tables: WideString; + Tables: String; begin if db = '' then n := DBtree.GetFirst @@ -4931,7 +4931,7 @@ end; } procedure TMainForm.lboxQueryHelpersDblClick(Sender: TObject); var - text: WideString; + text: String; i: Integer; begin if ActiveQueryTabset.TabIndex = 3 then begin @@ -5366,7 +5366,7 @@ procedure TMainForm.RestoreListSetup( List: TVirtualStringTree ); var i : Byte; colwidth, colpos : Integer; - Value : WideString; + Value : String; ValueList : TWideStringList; Regname: String; frm: TCustomForm; @@ -5642,10 +5642,10 @@ var VT : TVirtualStringTree; i : Integer; match : Boolean; - search : WideString; + search : String; tab: TTabSheet; VisibleCount: Cardinal; - CellText: WideString; + CellText: String; begin // Disable timer to avoid filtering in a loop TimerFilterVT.Enabled := False; @@ -5680,7 +5680,7 @@ begin Exit; // Loop through all nodes and hide non matching Node := VT.GetFirst; - search := WideLowerCase( editFilterVT.Text ); + search := LowerCase( editFilterVT.Text ); VisibleCount := 0; while Assigned(Node) do begin // Don't filter anything if the filter text is empty @@ -5688,7 +5688,7 @@ begin // Search for given text in node's captions if not match then for i := 0 to VT.Header.Columns.Count - 1 do begin CellText := VT.Text[Node, i]; - if Pos( search, WideLowerCase(CellText)) > 0 then begin + if Pos( search, LowerCase(CellText)) > 0 then begin match := True; break; end; @@ -5748,7 +5748,7 @@ procedure TMainForm.DBtreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: String); var DBObjects: TDBObjectList; - db: WideString; + db: String; i, j: Integer; Bytes: Int64; AllListsCached: Boolean; @@ -5953,7 +5953,7 @@ end; procedure TMainForm.DBtreeFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); var - newDb, newDbObject: WideString; + newDb, newDbObject: String; begin debug('DBtreeFocusChanged()'); SelectedTableCreateStatement := ''; @@ -6035,7 +6035,7 @@ begin end; -procedure TMainForm.DatabaseChanged(Database: WideString); +procedure TMainForm.DatabaseChanged(Database: String); begin if (Database='') or (Databases.IndexOf(Database) > -1) then ActiveDatabase := Database; @@ -6073,9 +6073,9 @@ end; {** Refresh the whole tree } -procedure TMainForm.RefreshTree(DoResetTableCache: Boolean; SelectDatabase: WideString = ''); +procedure TMainForm.RefreshTree(DoResetTableCache: Boolean; SelectDatabase: String = ''); var - oldActiveDatabase, oldSelectedTableName: WideString; + oldActiveDatabase, oldSelectedTableName: String; oldSelectedTableType: TListNodeType; begin // Remember currently active database and table @@ -6110,9 +6110,9 @@ end; {** Refresh one database node in the db tree } -procedure TMainForm.RefreshTreeDB(db: WideString); +procedure TMainForm.RefreshTreeDB(db: String); var - oldActiveDatabase, oldSelectedTableName: WideString; + oldActiveDatabase, oldSelectedTableName: String; oldSelectedTableType: TListNodeType; DBNode, FNode: PVirtualNode; TableHereHadFocus: Boolean; @@ -6153,7 +6153,7 @@ end; {** Find a database node in the tree by passing its name } -function TMainForm.FindDBNode(db: WideString): PVirtualNode; +function TMainForm.FindDBNode(db: String): PVirtualNode; var i, s: Integer; n: PVirtualNode; @@ -6211,7 +6211,7 @@ end; procedure TMainForm.editFilterSearchChange(Sender: TObject); var - Add, Clause: WideString; + Add, Clause: String; i: Integer; ed: TEdit; Col: TTableColumn; @@ -6272,10 +6272,10 @@ begin end; -procedure TMainForm.EnsureNodeLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode; WhereClause: WideString); +procedure TMainForm.EnsureNodeLoaded(Sender: TBaseVirtualTree; Node: PVirtualNode; WhereClause: String); var res: TGridResult; - query: WideString; + query: String; Results: TMySQLQuery; i, j: LongInt; begin @@ -6311,7 +6311,7 @@ begin for j := 0 to Results.ColumnCount - 1 do begin case res.Columns[j].DatatypeCat of dtcInteger, dtcReal: res.Rows[i].Cells[j].Text := FormatNumber(Results.Col(j), False); - dtcBinary: res.Rows[i].Cells[j].Text := '0x' + BinToWideHex(Results.Col(j)); + dtcBinary: res.Rows[i].Cells[j].Text := '0x' + BinToWideHex(Results.ColAsAnsi(j)); else res.Rows[i].Cells[j].Text := Results.Col(j); end; res.Rows[i].Cells[j].IsNull := Results.IsNull(j); @@ -6328,7 +6328,7 @@ procedure TMainForm.EnsureChunkLoaded(Sender: TBaseVirtualTree; Node: PVirtualNo var res: TGridResult; start, limit: Cardinal; - query: WideString; + query: String; Results: TMySQLQuery; i, j: LongInt; hi: LongInt; @@ -6387,7 +6387,7 @@ begin for j:=0 to Results.ColumnCount-1 do begin case res.Columns[j].DatatypeCat of dtcInteger, dtcReal: res.Rows[i].Cells[j].Text := FormatNumber(Results.Col(j), False); - dtcBinary: res.Rows[i].Cells[j].Text := '0x' + BinToWideHex(Results.Col(j)); + dtcBinary: res.Rows[i].Cells[j].Text := '0x' + BinToWideHex(Results.ColAsAnsi(j)); else res.Rows[i].Cells[j].Text := Results.Col(j); end; res.Rows[i].Cells[j].IsNull := Results.IsNull(j); @@ -6518,7 +6518,7 @@ var frm: TForm; i, j : Integer; columnexists : Boolean; - ColName: WideString; + ColName: String; begin if HitInfo.Column = NoColumn then Exit; @@ -6664,7 +6664,7 @@ end; function TMainForm.GridPostUpdate(Sender: TBaseVirtualTree): Boolean; var i: Integer; - sql, Val: WideString; + sql, Val: String; Row: PGridRow; begin sql := 'UPDATE '+mask(DataGridDB)+'.'+mask(DataGridTable)+' SET'; @@ -6746,10 +6746,10 @@ end; {** Compose a WHERE clause used for UPDATEs and DELETEs } -function TMainForm.GetWhereClause(Row: PGridRow; Columns: PGridColumns): WideString; +function TMainForm.GetWhereClause(Row: PGridRow; Columns: PGridColumns): String; var i, j: Integer; - KeyVal: WideString; + KeyVal: String; KeyCols: TWideStringlist; begin Result := ''; @@ -6828,7 +6828,7 @@ end; procedure TMainForm.DataGridInsertRow(CopyValuesFromNode: PVirtualNode); var i, j: Integer; - Val: WideString; + Val: String; begin // Scroll to the bottom to ensure we append the new row at the very last DataGridResult chunk DataGrid.FocusedNode := DataGrid.GetLast; @@ -6863,7 +6863,7 @@ end; function TMainForm.GridPostInsert(Sender: TBaseVirtualTree): Boolean; var Row: PGridRow; - sql, Cols, Val, Vals: WideString; + sql, Cols, Val, Vals: String; i: Integer; Node: PVirtualNode; begin @@ -6930,7 +6930,7 @@ function TMainForm.GridPostDelete(Sender: TBaseVirtualTree): Boolean; var Node, FocusAfterDelete: PVirtualNode; Nodes: TNodeArray; - sql: WideString; + sql: String; Affected, Matching: Int64; Selected, i, j: Integer; msg: String; @@ -7050,7 +7050,7 @@ var Cell: PGridCell; Row: PGridRow; Col: PGridColumn; - sql: WideString; + sql: String; len: Int64; Results: TMySQLQuery; begin @@ -7077,7 +7077,7 @@ begin Results := Connection.GetResults(sql); case Col.DatatypeCat of dtcInteger, dtcReal: Cell.Text := FormatNumber(Results.Col(0), False); - dtcBinary: Cell.Text := '0x' + BinToWideHex(Results.Col(0)); + dtcBinary: Cell.Text := '0x' + BinToWideHex(Results.ColAsAnsi(0)); else Cell.Text := Results.Col(0); end; Cell.IsNull := Results.IsNull(0); @@ -7293,7 +7293,7 @@ var Col: TTableColumn; HiddenCols: TWideStringList; TestList: TStringList; - Sort: WideString; + Sort: String; begin OpenRegistry; MainReg.OpenKey(GetRegKeyTable, True); @@ -7318,20 +7318,20 @@ begin HiddenCols.Add(Col.Name); end; if HiddenCols.Count > 0 then - MainReg.WriteString(REGNAME_HIDDENCOLUMNS, Utf8Encode(HiddenCols.DelimitedText)) + MainReg.WriteString(REGNAME_HIDDENCOLUMNS, HiddenCols.DelimitedText) else if MainReg.ValueExists(REGNAME_HIDDENCOLUMNS) then MainReg.DeleteValue(REGNAME_HIDDENCOLUMNS); FreeAndNil(HiddenCols); if SynMemoFilter.GetTextLen > 0 then - MainReg.WriteString(REGNAME_FILTER, Utf8Encode(SynMemoFilter.Text)) + MainReg.WriteString(REGNAME_FILTER, SynMemoFilter.Text) else if MainReg.ValueExists(REGNAME_FILTER) then MainReg.DeleteValue(REGNAME_FILTER); for i := 0 to High(FDataGridSort) do Sort := Sort + IntToStr(FDataGridSort[i].SortDirection) + '_' + FDataGridSort[i].ColumnName + REGDELIM; if Sort <> '' then - MainReg.WriteString(REGNAME_SORT, Utf8Encode(Sort)) + MainReg.WriteString(REGNAME_SORT, Sort) else if MainReg.ValueExists(REGNAME_SORT) then MainReg.DeleteValue(REGNAME_SORT); @@ -7358,7 +7358,7 @@ begin HiddenCols := TWideStringlist.Create; HiddenCols.Delimiter := REGDELIM; HiddenCols.StrictDelimiter := True; - HiddenCols.DelimitedText := Utf8Decode(MainReg.ReadString(REGNAME_HIDDENCOLUMNS)); + HiddenCols.DelimitedText := MainReg.ReadString(REGNAME_HIDDENCOLUMNS); FDataGridSelect.Clear; for i:=0 to SelectedTableColumns.Count-1 do begin Col := TTableColumn(SelectedTableColumns[i]); @@ -7370,7 +7370,7 @@ begin // Filter if MainReg.ValueExists(REGNAME_FILTER) then begin - SynMemoFilter.Text := Utf8Decode(MainReg.ReadString(REGNAME_FILTER)); + SynMemoFilter.Text := MainReg.ReadString(REGNAME_FILTER); if SynMemoFilter.GetTextLen > 0 then ToggleFilterPanel(True); end; @@ -7381,7 +7381,7 @@ begin rx := TRegExpr.Create; rx.Expression := '\b(\d)_(.+)\'+REGDELIM; rx.ModifierG := False; - if rx.Exec(Utf8Decode(MainReg.ReadString(REGNAME_SORT))) then while true do begin + if rx.Exec(MainReg.ReadString(REGNAME_SORT)) then while true do begin idx := Length(FDataGridSort); SetLength(FDataGridSort, idx+1); FDataGridSort[idx] := TOrderCol.Create; @@ -7399,7 +7399,7 @@ function TMainForm.GetRegKeyTable: String; begin // Return the slightly complex registry path to \Servers\ThisServer\curdb|curtable Result := REGPATH + REGKEY_SESSIONS + SessionName + '\' + - Utf8Encode(ActiveDatabase) + REGDELIM + Utf8Encode(SelectedTable.Name); + ActiveDatabase + REGDELIM + SelectedTable.Name; end; @@ -7487,7 +7487,7 @@ var valcount: Int64; tmpval: Double; Results: TMySQLQuery; - val, avg_perhour, avg_persec: WideString; + val, avg_perhour, avg_persec: String; valIsBytes, valIsNumber: Boolean; vt: TVirtualStringTree; Sel: TWideStringList; @@ -7560,7 +7560,7 @@ var Results: TMySQLQuery; vt: TVirtualStringTree; Sel: TWideStringList; - Text: WideString; + Text: String; const InfoLen = SIZE_KB*10; begin @@ -7620,7 +7620,7 @@ end; procedure TMainForm.ListCommandStatsBeforePaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas); - procedure addLVitem( idx: Integer; caption: WideString; commandCount: Int64; totalCount: Int64 ); + procedure addLVitem( idx: Integer; caption: String; commandCount: Int64; totalCount: Int64 ); var tmpval : Double; begin @@ -7716,7 +7716,7 @@ begin end else if Control is TCustomComboBox then begin Combo := TCustomComboBox(Control); if Combo.SelLength > 0 then begin - CopyToClipboard(Combo.SelText); + Clipboard.AsText := Combo.SelText; if DoCut then Combo.SelText := ''; Success := True; end; @@ -7725,7 +7725,7 @@ begin if Assigned(Grid.FocusedNode) then begin if Grid = ActiveGrid then EnsureFullWidth(Grid, Grid.FocusedColumn, Grid.FocusedNode); - CopyToClipboard(Grid.Text[Grid.FocusedNode, Grid.FocusedColumn]); + Clipboard.AsText := Grid.Text[Grid.FocusedNode, Grid.FocusedColumn]; if (Grid = ActiveGrid) and DoCut then Grid.Text[Grid.FocusedNode, Grid.FocusedColumn] := ''; Success := True; @@ -7751,12 +7751,10 @@ var Grid: TVirtualStringTree; SynMemo: TSynMemo; Success: Boolean; - CB: TUniClipboard; begin // Paste text into the focused control Success := False; Control := Screen.ActiveControl; - CB := TUniClipboard.Create; // Do not handle Search/replace dialog if not Control.Focused then Exit; if not Clipboard.HasFormat(CF_TEXT) then begin @@ -7770,13 +7768,13 @@ begin end else if Control is TComboBox then begin Combo := TComboBox(Control); if Combo.Style = csDropDown then begin - Combo.SelText := CB.AsWideString; + Combo.SelText := ClipBoard.AsText; Success := True; end; end else if Control is TVirtualStringTree then begin Grid := Control as TVirtualStringTree; if Assigned(Grid.FocusedNode) and (Grid = ActiveGrid) then begin - Grid.Text[Grid.FocusedNode, Grid.FocusedColumn] := CB.AsWideString; + Grid.Text[Grid.FocusedNode, Grid.FocusedColumn] := ClipBoard.AsText; Success := True; end; end else if Control is TSynMemo then begin @@ -7887,7 +7885,6 @@ begin item.Tag := MakeInt(flt[i]); item.OnClick := LoadRecentFilter; menuRecentFilters.Add(item); - capt := Utf8Decode(capt); comboRecentFilters.Items.Add(sstr(capt, 100)); end; FreeAndNil(rx); @@ -7919,7 +7916,7 @@ begin SynMemoFilter.UndoList.AddGroupBreak; SynMemoFilter.BeginUpdate; SynMemoFilter.SelectAll; - SynMemoFilter.SelText := Utf8Decode( MainReg.ReadString(IntToStr(key)) ); + SynMemoFilter.SelText := MainReg.ReadString(IntToStr(key)); SynMemoFilter.EndUpdate; end; end; @@ -8006,9 +8003,9 @@ begin end; -procedure TMainForm.SetEditorTabCaption(Editor: TDBObjectEditor; ObjName: WideString); +procedure TMainForm.SetEditorTabCaption(Editor: TDBObjectEditor; ObjName: String); var - ObjType, Cap: WideString; + ObjType, Cap: String; IconIndex: Integer; begin if Editor = TableEditor then begin @@ -8038,7 +8035,7 @@ end; procedure TMainForm.actEditObjectExecute(Sender: TObject); var NodeData: PVTreeData; - db: WideString; + db: String; begin debug('actEditObjectExecute()'); if ListTables.Focused then begin @@ -8508,7 +8505,7 @@ begin end; -procedure TMainForm.SetTabCaption(PageIndex: Integer; Text: WideString); +procedure TMainForm.SetTabCaption(PageIndex: Integer; Text: String); begin // Special case if passed text is empty: Reset query tab caption to "Query #123" if (PageIndex = tabQuery.PageIndex) and (Text = '') then @@ -8565,7 +8562,7 @@ end; procedure TMainForm.comboOnlyDBsExit(Sender: TObject); var i, idx: Integer; - FilterText: WideString; + FilterText: String; begin // Add (move) custom filter text to (in) drop down history, if not empty FilterText := comboOnlyDBs.Text; @@ -8595,7 +8592,7 @@ end; procedure TMainForm.comboOnlyDBsDragDrop(Sender, Source: TObject; X, Y: Integer); var dbs: TWideStringList; - newdb: WideString; + newdb: String; begin // DBtree node dropped on DB filter dropdown dbs := Explode(';', comboOnlyDBs.Text); @@ -8645,7 +8642,7 @@ end; procedure TMainForm.UpdateFilterPanel(Sender: TObject); var tab: TTabSheet; - f: WideString; + f: String; FilterPanelVisible: Boolean; begin // Called when active tab changes @@ -8765,7 +8762,7 @@ var Control: TWinControl; m: TCustomSynEdit; CursorPosStart, CursorPosEnd: Integer; - NewSQL: WideString; + NewSQL: String; begin // Reformat SQL query m := nil; @@ -8822,7 +8819,7 @@ end; procedure TMainForm.menuQueryHelpersGenerateStatementClick(Sender: TObject); var MenuItem: TMenuItem; - sql, Val, WhereClause: WideString; + sql, Val, WhereClause: String; i, idx: Integer; ColumnNames, DefaultValues, KeyColumns: TWideStringlist; Column: TTableColumn; diff --git a/source/mysql_connection.pas b/source/mysql_connection.pas index 95146ddb..b1f7e25e 100644 --- a/source/mysql_connection.pas +++ b/source/mysql_connection.pas @@ -12,7 +12,7 @@ type TListNodeType = (lntNone, lntDb, lntTable, lntView, lntFunction, lntProcedure, lntTrigger, lntColumn); TListNodeTypes = Set of TListNodeType; TDBObject = class - Name, Database, Engine, Comment, RowFormat, CreateOptions, Collation, ObjType: WideString; + Name, Database, Engine, Comment, RowFormat, CreateOptions, Collation, ObjType: String; Created, Updated, LastChecked: TDateTime; Rows, Size, Version, AvgRowLen, MaxDataLen, IndexLen, DataLen, DataFree, AutoInc, CheckSum: Int64; NodeType: TListNodeType; @@ -31,8 +31,8 @@ type { TMySQLConnection } TMySQLLogCategory = (lcInfo, lcSQL, lcError, lcWarning, lcDebug); - TMySQLLogEvent = procedure(Msg: WideString; Category: TMySQLLogCategory=lcInfo) of object; - TMySQLDatabaseChangedEvent = procedure(Database: WideString) of object; + TMySQLLogEvent = procedure(Msg: String; Category: TMySQLLogCategory=lcInfo) of object; + TMySQLDatabaseChangedEvent = procedure(Database: String) of object; TMySQLServerCapability = ( cpShowEngines, // SHOW ENGINES @@ -89,35 +89,35 @@ type FActive: Boolean; FConnectionStarted: Integer; FServerStarted: Integer; - FHostname: AnsiString; - FSocketname: AnsiString; + FHostname: String; + FSocketname: String; FPort: Integer; - FUsername: AnsiString; - FPassword: AnsiString; - FDatabase: WideString; - FLogPrefix: WideString; + FUsername: String; + FPassword: String; + FDatabase: String; + FLogPrefix: String; FOnLog: TMySQLLogEvent; FOnDatabaseChanged: TMySQLDatabaseChangedEvent; FOptions: TMySQLClientOptions; FCapabilities: TMySQLServerCapabilities; FRowsFound: Int64; FRowsAffected: Int64; - FServerVersionUntouched: AnsiString; + FServerVersionUntouched: String; FLastQueryDuration, FLastQueryNetworkDuration: Cardinal; FIsUnicode: Boolean; FTableEngines: TStringList; - FTableEngineDefault: AnsiString; + FTableEngineDefault: String; FCollationTable: TMySQLQuery; FCharsetTable: TMySQLQuery; FInformationSchemaObjects: TWideStringlist; FDBObjectLists: TWideStringList; procedure SetActive(Value: Boolean); - procedure SetDatabase(Value: WideString); + procedure SetDatabase(Value: String); function GetThreadId: Cardinal; - function GetCharacterSet: AnsiString; - procedure SetCharacterSet(CharsetName: AnsiString); - function GetLastError: WideString; - function GetServerVersionStr: AnsiString; + function GetCharacterSet: String; + procedure SetCharacterSet(CharsetName: String); + function GetLastError: String; + function GetServerVersionStr: String; function GetServerVersionInt: Integer; function GetTableEngines: TStringList; function GetCollationTable: TMySQLQuery; @@ -127,33 +127,33 @@ type function GetInformationSchemaObjects: TWideStringlist; function GetConnectionUptime: Integer; function GetServerUptime: Integer; - procedure Log(Category: TMySQLLogCategory; Msg: WideString); + procedure Log(Category: TMySQLLogCategory; Msg: String); procedure DetectCapabilities; procedure ClearCache; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; - function Query(SQL: WideString; DoStoreResult: Boolean=False): PMYSQL_RES; - function EscapeString(Text: WideString; ProcessJokerChars: Boolean=False): WideString; - function escChars(const Text: WideString; EscChar, Char1, Char2, Char3, Char4: WideChar): WideString; - function QuoteIdent(Identifier: WideString): WideString; - function DeQuoteIdent(Identifier: WideString): WideString; - function ConvertServerVersion(Version: Integer): AnsiString; - function GetResults(SQL: WideString): TMySQLQuery; - function GetCol(SQL: WideString; Column: Integer=0): TWideStringList; - function GetVar(SQL: WideString; Column: Integer=0): WideString; overload; - function GetVar(SQL: WideString; Column: WideString): WideString; overload; + function Query(SQL: String; DoStoreResult: Boolean=False): PMYSQL_RES; + function EscapeString(Text: String; ProcessJokerChars: Boolean=False): String; + function escChars(const Text: String; EscChar, Char1, Char2, Char3, Char4: WideChar): String; + function QuoteIdent(Identifier: String): String; + function DeQuoteIdent(Identifier: String): String; + function ConvertServerVersion(Version: Integer): String; + function GetResults(SQL: String): TMySQLQuery; + function GetCol(SQL: String; Column: Integer=0): TWideStringList; + function GetVar(SQL: String; Column: Integer=0): String; overload; + function GetVar(SQL: String; Column: String): String; overload; function Ping: Boolean; - function GetDBObjects(db: WideString; Refresh: Boolean=False): TDBObjectList; - function DbObjectsCached(db: WideString): Boolean; - procedure ClearDbObjects(db: WideString=''); + function GetDBObjects(db: String; Refresh: Boolean=False): TDBObjectList; + function DbObjectsCached(db: String): Boolean; + procedure ClearDbObjects(db: String=''); property ThreadId: Cardinal read GetThreadId; property ConnectionUptime: Integer read GetConnectionUptime; property ServerUptime: Integer read GetServerUptime; - property CharacterSet: AnsiString read GetCharacterSet write SetCharacterSet; - property LastError: WideString read GetLastError; - property ServerVersionUntouched: AnsiString read FServerVersionUntouched; - property ServerVersionStr: AnsiString read GetServerVersionStr; + property CharacterSet: String read GetCharacterSet write SetCharacterSet; + property LastError: String read GetLastError; + property ServerVersionUntouched: String read FServerVersionUntouched; + property ServerVersionStr: String read GetServerVersionStr; property ServerVersionInt: Integer read GetServerVersionInt; property Capabilities: TMySQLServerCapabilities read FCapabilities; property RowsFound: Int64 read FRowsFound; @@ -162,7 +162,7 @@ type property LastQueryNetworkDuration: Cardinal read FLastQueryNetworkDuration; property IsUnicode: Boolean read FIsUnicode; property TableEngines: TStringList read GetTableEngines; - property TableEngineDefault: AnsiString read FTableEngineDefault; + property TableEngineDefault: String read FTableEngineDefault; property CollationTable: TMySQLQuery read GetCollationTable; property CollationList: TStringList read GetCollationList; property CharsetTable: TMySQLQuery read GetCharsetTable; @@ -170,14 +170,14 @@ type property InformationSchemaObjects: TWideStringlist read GetInformationSchemaObjects; published property Active: Boolean read FActive write SetActive default False; - property Hostname: AnsiString read FHostname write FHostname; - property Socketname: AnsiString read FSocketname write FSocketname; + property Hostname: String read FHostname write FHostname; + property Socketname: String read FSocketname write FSocketname; property Port: Integer read FPort write FPort default MYSQL_PORT; - property Username: AnsiString read FUsername write FUsername; - property Password: AnsiString read FPassword write FPassword; - property Database: WideString read FDatabase write SetDatabase; + property Username: String read FUsername write FUsername; + property Password: String read FPassword write FPassword; + property Database: String read FDatabase write SetDatabase; property Options: TMySQLClientOptions read FOptions write FOptions default [opCompress, opLocalFiles, opInteractive, opProtocol41]; - property LogPrefix: WideString read FLogPrefix write FLogPrefix; + property LogPrefix: String read FLogPrefix write FLogPrefix; // Events property OnLog: TMySQLLogEvent read FOnLog write FOnLog; property OnDatabaseChanged: TMySQLDatabaseChangedEvent read FOnDatabaseChanged write FOnDatabaseChanged; @@ -188,7 +188,7 @@ type TMySQLQuery = class(TComponent) private - FSQL: WideString; + FSQL: String; FConnection: TMySQLConnection; FRecNo, FRecordCount: Int64; @@ -197,7 +197,7 @@ type FCurrentRow: PMYSQL_ROW; FEof: Boolean; FDatatypes: Array of TDatatype; - procedure SetSQL(Value: WideString); + procedure SetSQL(Value: String); procedure SetRecNo(Value: Int64); public constructor Create(AOwner: TComponent); override; @@ -206,20 +206,21 @@ type procedure First; procedure Next; function ColumnCount: Integer; - function Col(Column: Integer; IgnoreErrors: Boolean=False): WideString; overload; - function Col(ColumnName: WideString; IgnoreErrors: Boolean=False): WideString; overload; + function Col(Column: Integer; IgnoreErrors: Boolean=False): String; overload; + function Col(ColumnName: String; IgnoreErrors: Boolean=False): String; overload; + function ColAsAnsi(Column: Integer; IgnoreErrors: Boolean=False): AnsiString; function DataType(Column: Integer): TDataType; - function ColExists(Column: WideString): Boolean; + function ColExists(Column: String): Boolean; function ColIsPrimaryKeyPart(Column: Integer): Boolean; function IsNull(Column: Integer): Boolean; overload; - function IsNull(Column: WideString): Boolean; overload; + function IsNull(Column: String): Boolean; overload; function HasResult: Boolean; property RecNo: Int64 read FRecNo write SetRecNo; property Eof: Boolean read FEof; property RecordCount: Int64 read FRecordCount; property ColumnNames: TWideStringList read FColumnNames; published - property SQL: WideString read FSQL write SetSQL; + property SQL: String read FSQL write SetSQL; property Connection: TMySQLConnection read FConnection write FConnection; end; @@ -259,8 +260,8 @@ procedure TMySQLConnection.SetActive( Value: Boolean ); var Connected: PMYSQL; ClientFlags: Integer; - Error, tmpdb: WideString; - UsingPass, Protocol, CurCharset: AnsiString; + Error, tmpdb: String; + UsingPass, Protocol, CurCharset: String; begin FActive := Value; @@ -299,12 +300,12 @@ begin ', using password: '+UsingPass+' ...'); Connected := mysql_real_connect( FHandle, - PAnsiChar(FHostname), - PAnsiChar(FUsername), - PAnsiChar(FPassword), + PAnsiChar(Utf8Encode(FHostname)), + PAnsiChar(Utf8Encode(FUsername)), + PAnsiChar(Utf8Encode(FPassword)), nil, FPort, - PAnsiChar(FSocketname), + PAnsiChar(Utf8Encode(FSocketname)), ClientFlags ); if Connected = nil then begin @@ -322,7 +323,7 @@ begin FIsUnicode := CurCharset = 'utf8'; FConnectionStarted := GetTickCount div 1000; FServerStarted := FConnectionStarted - StrToIntDef(GetVar('SHOW STATUS LIKE ''Uptime''', 1), 1); - FServerVersionUntouched := mysql_get_server_info(FHandle); + FServerVersionUntouched := Utf8ToString(mysql_get_server_info(FHandle)); DetectCapabilities; if FDatabase <> '' then begin tmpdb := FDatabase; @@ -362,7 +363,7 @@ end; {** Executes a query } -function TMySQLConnection.Query(SQL: WideString; DoStoreResult: Boolean=False): PMYSQL_RES; +function TMySQLConnection.Query(SQL: String; DoStoreResult: Boolean=False): PMYSQL_RES; var querystatus: Integer; NativeSQL: AnsiString; @@ -418,7 +419,7 @@ end; {** Set "Database" property and select that db if connected } -procedure TMySQLConnection.SetDatabase(Value: WideString); +procedure TMySQLConnection.SetDatabase(Value: String); begin if Value <> FDatabase then begin if Value = '' then begin @@ -443,30 +444,30 @@ end; {** Return currently used character set } -function TMySQLConnection.GetCharacterSet: AnsiString; +function TMySQLConnection.GetCharacterSet: String; begin - Result := mysql_character_set_name(FHandle); + Result := Utf8ToString(mysql_character_set_name(FHandle)); end; {** Switch character set } -procedure TMySQLConnection.SetCharacterSet(CharsetName: AnsiString); +procedure TMySQLConnection.SetCharacterSet(CharsetName: String); begin - mysql_set_character_set(FHandle, PAnsiChar(CharsetName)); + mysql_set_character_set(FHandle, PAnsiChar(Utf8Encode(CharsetName))); end; {** Return the last error nicely formatted } -function TMySQLConnection.GetLastError: WideString; +function TMySQLConnection.GetLastError: String; var - Msg, Additional: WideString; + Msg, Additional: String; rx: TRegExpr; begin - Msg := Utf8Decode(mysql_error(FHandle)); + Msg := Utf8ToString(mysql_error(FHandle)); // Find "(errno: 123)" in message and add more meaningful message from perror.exe rx := TRegExpr.Create; rx.Expression := '.+\(errno\:\s+(\d+)\)'; @@ -487,7 +488,7 @@ end; function TMySQLConnection.GetServerVersionInt: Integer; var i, dots: Byte; - v1, v2, v3: AnsiString; + v1, v2, v3: String; begin Result := -1; @@ -501,7 +502,7 @@ begin // We expect exactly 2 dots. if dots > 2 then break; - end else if FServerVersionUntouched[i] in ['0'..'9'] then begin + end else if CharInSet(FServerVersionUntouched[i], ['0'..'9']) then begin if dots = 0 then v1 := v1 + FServerVersionUntouched[i] else if dots = 1 then @@ -522,7 +523,7 @@ begin end; -function TMySQLConnection.GetServerVersionStr: AnsiString; +function TMySQLConnection.GetServerVersionStr: String; begin Result := ConvertServerVersion(ServerVersionInt); end; @@ -531,9 +532,9 @@ end; {** Convert integer version to real version string } -function TMySQLConnection.ConvertServerVersion(Version: Integer): AnsiString; +function TMySQLConnection.ConvertServerVersion(Version: Integer): String; var - v : AnsiString; + v : String; v1, v2 : Byte; begin v := IntToStr( Version ); @@ -543,7 +544,7 @@ begin end; -function TMySQLConnection.GetResults(SQL: WideString): TMySQLQuery; +function TMySQLConnection.GetResults(SQL: String): TMySQLQuery; begin Result := TMySQLQuery.Create(Self); Result.Connection := Self; @@ -560,7 +561,7 @@ end; {** Call log event if assigned to object } -procedure TMySQLConnection.Log(Category: TMySQLLogCategory; Msg: WideString); +procedure TMySQLConnection.Log(Category: TMySQLLogCategory; Msg: String); begin if Assigned(FOnLog) then FOnLog(FLogPrefix+Msg, Category); @@ -579,7 +580,7 @@ end; @param boolean Escape text so it can be used in a LIKE-comparison @return string } -function TMySQLConnection.EscapeString(Text: WideString; ProcessJokerChars: Boolean=false): WideString; +function TMySQLConnection.EscapeString(Text: String; ProcessJokerChars: Boolean=false): String; var c1, c2, c3, c4, EscChar: WideChar; begin @@ -615,7 +616,7 @@ end; {*** Attempt to do string replacement faster than StringReplace and WideStringReplace. } -function TMySQLConnection.escChars(const Text: WideString; EscChar, Char1, Char2, Char3, Char4: WideChar): WideString; +function TMySQLConnection.escChars(const Text: String; EscChar, Char1, Char2, Char3, Char4: WideChar): String; const // Attempt to match whatever the CPU cache will hold. block: Cardinal = 65536; @@ -667,14 +668,14 @@ end; Add backticks to identifier Todo: Support ANSI style } -function TMySQLConnection.QuoteIdent(Identifier: WideString): WideString; +function TMySQLConnection.QuoteIdent(Identifier: String): String; begin Result := WideStringReplace(Identifier, '`', '``', [rfReplaceAll]); Result := '`' + Result + '`'; end; -function TMySQLConnection.DeQuoteIdent(Identifier: WideString): WideString; +function TMySQLConnection.DeQuoteIdent(Identifier: String): String; begin Result := Identifier; if (Result[1] = '`') and (Result[Length(Identifier)] = '`') then @@ -718,7 +719,7 @@ begin end; -function TMySQLConnection.GetCol(SQL: WideString; Column: Integer=0): TWideStringList; +function TMySQLConnection.GetCol(SQL: String; Column: Integer=0): TWideStringList; var Results: TMySQLQuery; begin @@ -735,7 +736,7 @@ end; {** Get single cell value via SQL query, identified by column number } -function TMySQLConnection.GetVar(SQL: WideString; Column: Integer=0): WideString; +function TMySQLConnection.GetVar(SQL: String; Column: Integer=0): String; var Results: TMySQLQuery; begin @@ -751,7 +752,7 @@ end; {** Get single cell value via SQL query, identified by column name } -function TMySQLConnection.GetVar(SQL: WideString; Column: WideString): WideString; +function TMySQLConnection.GetVar(SQL: String; Column: String): String; var Results: TMySQLQuery; begin @@ -767,7 +768,7 @@ end; function TMySQLConnection.GetTableEngines: TStringList; var ShowEngines, HaveEngines: TMySQLQuery; - engineName, engineSupport: AnsiString; + engineName, engineSupport: String; PossibleEngines: TStringList; begin if not Assigned(FTableEngines) then begin @@ -903,7 +904,7 @@ begin end; -procedure TMySQLConnection.ClearDbObjects(db: WideString=''); +procedure TMySQLConnection.ClearDbObjects(db: String=''); var i: Integer; begin @@ -924,14 +925,14 @@ begin end; -function TMySQLConnection.DbObjectsCached(db: WideString): Boolean; +function TMySQLConnection.DbObjectsCached(db: String): Boolean; begin // Check if a table list is stored in cache Result := Assigned(FDBObjectLists) and (FDBObjectLists.IndexOf(db) > -1); end; -function TMySQLConnection.GetDbObjects(db: WideString; Refresh: Boolean=False): TDBObjectList; +function TMySQLConnection.GetDbObjects(db: String; Refresh: Boolean=False): TDBObjectList; var obj: TDBObject; Results: TMySQLQuery; @@ -1158,7 +1159,7 @@ begin end; -procedure TMySQLQuery.SetSQL(Value: WideString); +procedure TMySQLQuery.SetSQL(Value: String); begin FSQL := Value; end; @@ -1177,7 +1178,7 @@ begin SetLength(FDatatypes, NumFields); for i:=0 to NumFields-1 do begin Field := mysql_fetch_field_direct(FLastResult, i); - FColumnNames.Add(Utf8Decode(Field.name)); + FColumnNames.Add(Utf8ToString(Field.name)); FDatatypes[i] := Datatypes[Low(Datatypes)]; if (Field.flags and ENUM_FLAG) = ENUM_FLAG then @@ -1240,32 +1241,23 @@ begin end; -function TMySQLQuery.Col(Column: Integer; IgnoreErrors: Boolean=False): WideString; -var - LengthPointer: PLongInt; - BinLen: LongInt; - Bin: AnsiString; +function TMySQLQuery.Col(Column: Integer; IgnoreErrors: Boolean=False): String; begin if (Column > -1) and (Column < ColumnCount) then begin - if FDatatypes[Column].Category = dtcBinary then begin - LengthPointer := mysql_fetch_lengths(FLastResult); - if LengthPointer <> nil then begin - BinLen := PLongInt(LongInt(LengthPointer) + Column * SizeOf(LongInt))^; - SetString(Bin, FCurrentRow[Column], BinLen); - Result := WideString(Bin); - end; - end else begin + if FDatatypes[Column].Category = dtcBinary then + Raise Exception.CreateFmt('Column "%s" has binary collation. Please use ColAsAnsi() instead Col().', [FColumnNames[Column]]) + else begin if Connection.IsUnicode then - Result := UTF8ToWideString(FCurrentRow[Column]) + Result := UTF8ToString(FCurrentRow[Column]) else - Result := FCurrentRow[Column]; + Result := String(FCurrentRow[Column]); end; end else if not IgnoreErrors then Raise Exception.CreateFmt('Column #%d not available. Query returned %d columns and %d rows.', [Column, ColumnCount, RecordCount]); end; -function TMySQLQuery.Col(ColumnName: WideString; IgnoreErrors: Boolean=False): WideString; +function TMySQLQuery.Col(ColumnName: String; IgnoreErrors: Boolean=False): String; var idx: Integer; begin @@ -1277,13 +1269,33 @@ begin end; +function TMySQLQuery.ColAsAnsi(Column: Integer; IgnoreErrors: Boolean=False): AnsiString; +var + LengthPointer: PLongInt; + BinLen: LongInt; +begin + // Return column value, explicitely as AnsiString. Should be used for binary columns. + if (Column > -1) and (Column < ColumnCount) then begin + if FDatatypes[Column].Category = dtcBinary then begin + LengthPointer := mysql_fetch_lengths(FLastResult); + if LengthPointer <> nil then begin + BinLen := PLongInt(LongInt(LengthPointer) + Column * SizeOf(LongInt))^; + SetString(Result, FCurrentRow[Column], BinLen); + end; + end else + Result := FCurrentRow[Column]; + end else if not IgnoreErrors then + Raise Exception.CreateFmt('Column #%d not available. Query returned %d columns and %d rows.', [Column, ColumnCount, RecordCount]); +end; + + function TMySQLQuery.DataType(Column: Integer): TDataType; begin Result := FDatatypes[Column]; end; -function TMySQLQuery.ColExists(Column: WideString): Boolean; +function TMySQLQuery.ColExists(Column: String): Boolean; begin Result := (ColumnNames <> nil) and (ColumnNames.IndexOf(Column) > -1); end; @@ -1307,7 +1319,7 @@ begin end; -function TMySQLQuery.IsNull(Column: WideString): Boolean; +function TMySQLQuery.IsNull(Column: String): Boolean; begin Result := IsNull(FColumnNames.IndexOf(Column)); end; diff --git a/source/mysql_structures.pas b/source/mysql_structures.pas index 8fa5f081..462c2580 100644 --- a/source/mysql_structures.pas +++ b/source/mysql_structures.pas @@ -29,7 +29,7 @@ type TDatatype = record Index: TDatatypeIndex; NativeType: Cardinal; // See field types in mysql_api.pas - Name: String[18]; + Name: String; Description: String; HasLength: Boolean; // Can have Length- or Set-attribute? RequiresLength: Boolean; // Must have a Length- or Set-attribute? @@ -44,7 +44,7 @@ type // MySQL data type category structure TDatatypeCategory = record Index: TDatatypeCategoryIndex; - Name: String[32]; + Name: String; Color: TColor; NullColor: TColor; end; diff --git a/source/options.pas b/source/options.pas index 28cf0b3b..abfaa43b 100644 --- a/source/options.pas +++ b/source/options.pas @@ -627,7 +627,7 @@ procedure Toptionsform.TreeShortcutItemsGetText(Sender: TBaseVirtualTree; Node: var Data: PShortcutItemData; i: Integer; - t: WideString; + t: String; begin // Fetch text of shortcut item case Sender.GetNodeLevel(Node) of @@ -657,7 +657,7 @@ procedure Toptionsform.TreeShortcutItemsInitChildren(Sender: TBaseVirtualTree; N var ChildCount: Cardinal); var i: Integer; - Category: WideString; + Category: String; begin // First initialization of shortcut items if Sender.GetNodeLevel(Node) = 0 then begin @@ -680,7 +680,7 @@ procedure Toptionsform.TreeShortcutItemsInitNode(Sender: TBaseVirtualTree; Paren var Data: PShortcutItemData; ItemIndex, i: Integer; - Category: WideString; + Category: String; begin if Sender.GetNodeLevel(Node) = 0 then Include(InitialStates, ivsHasChildren); diff --git a/source/routine_editor.pas b/source/routine_editor.pas index 03726277..6179947d 100644 --- a/source/routine_editor.pas +++ b/source/routine_editor.pas @@ -54,7 +54,7 @@ type procedure listParametersCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink); procedure listParametersNewText(Sender: TBaseVirtualTree; - Node: PVirtualNode; Column: TColumnIndex; NewText: WideString); + Node: PVirtualNode; Column: TColumnIndex; NewText: String); procedure listParametersEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); procedure Modification(Sender: TObject); @@ -72,7 +72,7 @@ type public { Public declarations } constructor Create(AOwner: TComponent); override; - procedure Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); override; + procedure Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); override; procedure ApplyModifications; override; end; @@ -111,10 +111,10 @@ begin end; -procedure TfrmRoutineEditor.Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); +procedure TfrmRoutineEditor.Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); var Results: TMySQLQuery; - Create, Params: WideString; + Create, Params: String; ParenthesesCount: Integer; Context: String; rx: TRegExpr; @@ -317,10 +317,10 @@ end; procedure TfrmRoutineEditor.listParametersNewText(Sender: TBaseVirtualTree; - Node: PVirtualNode; Column: TColumnIndex; NewText: WideString); + Node: PVirtualNode; Column: TColumnIndex; NewText: String); var OldValues: TWideStringList; - new: WideString; + new: String; begin OldValues := explode(DELIM, Parameters[Node.Index]); case Column of @@ -407,7 +407,7 @@ end; procedure TfrmRoutineEditor.ApplyModifications; var - BaseSQL, TempSQL, FinalSQL, TempName: WideString; + BaseSQL, TempSQL, FinalSQL, TempName: String; i: Integer; par, allRoutineNames: TWideStringList; ProcOrFunc: String; diff --git a/source/runsqlfile.pas b/source/runsqlfile.pas index 1fa150d2..d0fe0cbe 100644 --- a/source/runsqlfile.pas +++ b/source/runsqlfile.pas @@ -66,14 +66,14 @@ procedure TRunSQLFileForm.FormActivate(Sender: TObject); var Stream : TFileStream; FileCharset : TFileCharset; - lines : WideString; + lines : String; filesize, querycount, rowsaffected : Int64; starttime : Cardinal; SQL : TWideStringList; i : Integer; - lines_remaining : WideString; + lines_remaining : String; begin if Running then abort; diff --git a/source/table_editor.pas b/source/table_editor.pas index ff859809..d8bc5403 100644 --- a/source/table_editor.pas +++ b/source/table_editor.pas @@ -181,10 +181,10 @@ type procedure ValidateIndexControls; procedure MoveFocusedIndexPart(NewIdx: Cardinal); procedure ResetModificationFlags; - function ComposeCreateStatement: WideString; - function ComposeAlterStatement: WideString; - function GetIndexSQL(idx: Integer): WideString; - function GetForeignKeySQL(idx: Integer): WideString; + function ComposeCreateStatement: String; + function ComposeAlterStatement: String; + function GetIndexSQL(idx: Integer): String; + function GetForeignKeySQL(idx: Integer): String; procedure UpdateSQLcode; function CellEditingAllowed(Node: PVirtualNode; Column: TColumnIndex): Boolean; function GetIndexIcon(idx: Integer): Integer; @@ -192,7 +192,7 @@ type { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); override; + procedure Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); override; procedure ApplyModifications; override; end; @@ -247,9 +247,9 @@ begin end; -procedure TfrmTableEditor.Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); +procedure TfrmTableEditor.Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); var - CreateTable, AttrName, AttrValue: WideString; + CreateTable, AttrName, AttrValue: String; rx: TRegExpr; begin inherited; @@ -355,7 +355,7 @@ end; procedure TfrmTableEditor.ApplyModifications; var - sql: WideString; + sql: String; i: Integer; Specs: TWideStringlist; Key: TForeignKey; @@ -447,10 +447,10 @@ begin end; -function TfrmTableEditor.ComposeAlterStatement: WideString; +function TfrmTableEditor.ComposeAlterStatement: String; var Specs: TWideStringlist; - ColSpec, OldColName, IndexSQL: WideString; + ColSpec, OldColName, IndexSQL: String; i: Integer; Results: TMySQLQuery; TblKey: TTableKey; @@ -601,12 +601,12 @@ begin end; -function TfrmTableEditor.ComposeCreateStatement: WideString; +function TfrmTableEditor.ComposeCreateStatement: String; var i, IndexCount: Integer; Col: PTableColumn; Node: PVirtualNode; - tmp: WideString; + tmp: String; begin // Compose CREATE query, called by buttons and for SQL code tab Result := 'CREATE TABLE '+Mainform.mask(editName.Text)+' ('+CRLF; @@ -677,7 +677,7 @@ begin end; -function TfrmTableEditor.GetIndexSQL(idx: Integer): WideString; +function TfrmTableEditor.GetIndexSQL(idx: Integer): String; var TblKey: TTableKey; i: Integer; @@ -708,7 +708,7 @@ begin end; -function TfrmTableEditor.GetForeignKeySQL(idx: Integer): WideString; +function TfrmTableEditor.GetForeignKeySQL(idx: Integer): String; var Key: TForeignKey; i: Integer; @@ -1275,7 +1275,7 @@ procedure TfrmTableEditor.menuAddIndexColumnClick(Sender: TObject); var Node: PVirtualNode; i, j: Integer; - NewCol, PartLength: WideString; + NewCol, PartLength: String; ColExists: Boolean; Column: TTableColumn; TblKey: TTableKey; @@ -1486,7 +1486,7 @@ procedure TfrmTableEditor.treeIndexesEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); var VT: TVirtualStringtree; - IndexedColName: WideString; + IndexedColName: String; Col: TTableColumn; i: Integer; begin @@ -1617,7 +1617,7 @@ procedure TfrmTableEditor.treeIndexesDragDrop(Sender: TBaseVirtualTree; Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode); var Node: PVirtualNode; - ColName, PartLength: WideString; + ColName, PartLength: String; ColPos: Integer; VT, SourceVT: TVirtualStringtree; Col: PTableColumn; @@ -1758,7 +1758,7 @@ var Item: TMenuItem; PrimaryKeyExists, ColumnsSelected: Boolean; - IndexName: WideString; + IndexName: String; Node: PVirtualNode; Col: PTableColumn; TblKey: TTableKey; @@ -1810,7 +1810,7 @@ procedure TfrmTableEditor.AddIndexByColumn(Sender: TObject); var Item: TMenuItem; i: Integer; - NewType: WideString; + NewType: String; NewParts: TWideStringlist; TblKey: TTableKey; begin diff --git a/source/tabletools.pas b/source/tabletools.pas index 96cce545..51477b00 100644 --- a/source/tabletools.pas +++ b/source/tabletools.pas @@ -110,13 +110,13 @@ type FToolMode: TToolMode; OutputFiles, OutputDirs: TWideStringList; ExportStream: TStream; - ExportLastDatabase: Widestring; + ExportLastDatabase: String; FTargetConnection: TMySQLConnection; FLastOutputSelectedIndex: Integer; FModifiedDbs: TWideStringList; procedure SetToolMode(Value: TToolMode); - procedure AddResults(SQL: WideString); - procedure AddNotes(Col1, Col2, Col3, Col4: WideString); + procedure AddResults(SQL: String); + procedure AddNotes(Col1, Col2, Col3, Col4: String); procedure SetupResultGrid(Results: TMySQLQuery=nil); procedure UpdateResultGrid; procedure DoMaintenance(DBObj: TDBObject); @@ -135,7 +135,7 @@ implementation uses main, mysql_structures; const - STRSKIPPED: WideString = 'Skipped - '; + STRSKIPPED: String = 'Skipped - '; OUTPUT_FILE = 'One big file'; OUTPUT_DIR = 'Directory - one file per object'; OUTPUT_DB = 'Database'; @@ -164,7 +164,7 @@ begin TreeObjects.Width := GetRegValue(REGNAME_TOOLSTREEWIDTH, TreeObjects.Width); // Find text tab - memoFindText.Text := Utf8Decode(GetRegValue(REGNAME_TOOLSFINDTEXT, '')); + memoFindText.Text := GetRegValue(REGNAME_TOOLSFINDTEXT, ''); comboDatatypes.Items.Add('All data types'); for i:=Low(DatatypeCategories) to High(DatatypeCategories) do comboDatatypes.Items.Add(DatatypeCategories[i].Name); @@ -215,7 +215,7 @@ begin MainReg.WriteInteger( REGNAME_TOOLSWINHEIGHT, Height ); MainReg.WriteInteger( REGNAME_TOOLSTREEWIDTH, TreeObjects.Width); - MainReg.WriteString( REGNAME_TOOLSFINDTEXT, Utf8Encode(memoFindText.Text)); + MainReg.WriteString( REGNAME_TOOLSFINDTEXT, memoFindText.Text); MainReg.WriteInteger( REGNAME_TOOLSDATATYPE, comboDatatypes.ItemIndex); MainReg.WriteBool(REGNAME_EXP_CREATEDB, chkExportDatabasesCreate.Checked); @@ -499,7 +499,7 @@ end; procedure TfrmTableTools.DoMaintenance(DBObj: TDBObject); var - SQL: WideString; + SQL: String; begin if not (DBObj.NodeType in [lntTable, lntView]) then begin AddNotes(DBObj.Database, DBObj.Name, STRSKIPPED+'a '+LowerCase(DBObj.ObjType)+' cannot be maintained.', ''); @@ -519,7 +519,7 @@ end; procedure TfrmTableTools.DoFind(DBObj: TDBObject); var Results: TMySQLQuery; - SQL: WideString; + SQL: String; HasSelectedDatatype: Boolean; i: Integer; begin @@ -552,7 +552,7 @@ begin end; -procedure TfrmTableTools.AddResults(SQL: WideString); +procedure TfrmTableTools.AddResults(SQL: String); var i: Integer; Row: TWideStringlist; @@ -582,7 +582,7 @@ begin end; -procedure TfrmTableTools.AddNotes(Col1, Col2, Col3, Col4: WideString); +procedure TfrmTableTools.AddNotes(Col1, Col2, Col3, Col4: String); var Row: TWideStringlist; begin @@ -670,7 +670,7 @@ procedure TfrmTableTools.ResultGridPaintText(Sender: TBaseVirtualTree; const Tar Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); var VT: TVirtualStringTree; - Msg: WideString; + Msg: String; begin // Red text color for errors, purple for notes, grey for skipped tables if not (vsSelected in Node.States) then begin @@ -709,7 +709,7 @@ end; procedure TfrmTableTools.comboExportOutputTypeChange(Sender: TObject); var - OldItem: WideString; + OldItem: String; NewIdx, NetType: Integer; DBNode: PVirtualNode; SessionName: String; @@ -889,7 +889,7 @@ end; procedure TfrmTableTools.DoExport(DBObj: TDBObject); var ToFile, ToDir, ToDb, ToServer, IsLastRowInChunk, NeedsDBStructure: Boolean; - Struc, Header, FinalDbName, BaseInsert, Row, TargetDbAndObject: WideString; + Struc, Header, FinalDbName, BaseInsert, Row, TargetDbAndObject: String; LogRow, MultiSQL: TWideStringlist; i: Integer; RowCount, MaxRowsInChunk, RowsInChunk, Limit, Offset, ResultCount: Int64; @@ -900,13 +900,13 @@ const TempDelim = '//'; // Short version of Mainform.Mask() - function m(s: WideString): WideString; + function m(s: String): String; begin Result := Mainform.mask(s); end; // Pass output to file or query, and append semicolon if needed - procedure Output(SQL: WideString; IsEndOfQuery, ForFile, ForDir, ForDb, ForServer: Boolean); + procedure Output(SQL: String; IsEndOfQuery, ForFile, ForDir, ForDb, ForServer: Boolean); var SA: AnsiString; ChunkSize: Integer; @@ -924,7 +924,7 @@ const SetLength(SA, ChunkSize div SizeOf(AnsiChar)); ExportStream.Read(PAnsiChar(SA)^, ChunkSize); ExportStream.Size := 0; - SQL := UTF8Decode(SA); + SQL := UTF8ToString(SA); if ToDB then Mainform.Connection.Query(SQL) else if ToServer then FTargetConnection.Query(SQL); SQL := ''; @@ -990,7 +990,7 @@ begin if Mainform.Connection.ServerVersionInt >= 40100 then begin Struc := Mainform.Connection.GetVar('SHOW CREATE DATABASE '+m(DBObj.Database), 1); // Gracefully ignore it when target database exists, important in server mode - Insert('IF NOT EXISTS ', Struc, Pos(WideString('DATABASE'), Struc) + 9); + Insert('IF NOT EXISTS ', Struc, Pos('DATABASE', Struc) + 9); // Create the right dbname Struc := WideStringReplace(Struc, DBObj.Database, FinalDbName, []); end else @@ -1026,12 +1026,12 @@ begin Struc := rx.Replace(Struc, ' ', false); rx.Free; if DBObj.NodeType = lntTable then - Insert('IF NOT EXISTS ', Struc, Pos(WideString('TABLE'), Struc) + 6); + Insert('IF NOT EXISTS ', Struc, Pos('TABLE', Struc) + 6); if ToDb then begin if DBObj.NodeType = lntTable then - Insert(m(FinalDbName)+'.', Struc, Pos(WideString('EXISTS'), Struc) + 7 ) + Insert(m(FinalDbName)+'.', Struc, Pos('EXISTS', Struc) + 7 ) else if DBObj.NodeType = lntView then - Insert(m(FinalDbName)+'.', Struc, Pos(WideString('VIEW'), Struc) + 5 ); + Insert(m(FinalDbName)+'.', Struc, Pos('VIEW', Struc) + 5 ); end; end; @@ -1111,7 +1111,7 @@ begin Row := Row + 'NULL' else case Data.DataType(i).Category of dtcInteger, dtcReal: Row := Row + Data.Col(i); - dtcBinary: Row := Row + '_binary 0x' + BinToWideHex(Data.Col(i)); + dtcBinary: Row := Row + '_binary 0x' + BinToWideHex(Data.ColAsAnsi(i)); else Row := Row + esc(Data.Col(i)); end; if i<Data.ColumnCount-1 then @@ -1169,7 +1169,7 @@ end; procedure TfrmTableTools.DoBulkTableEdit(DBObj: TDBObject); var Specs, LogRow: TWideStringList; - CreateView: WideString; + CreateView: String; rx: TRegExpr; begin AddResults('SELECT '+esc(DBObj.Database)+' AS '+Mainform.mask('Database')+', ' + diff --git a/source/texteditor.pas b/source/texteditor.pas index 50dc249b..857688e0 100644 --- a/source/texteditor.pas +++ b/source/texteditor.pas @@ -44,8 +44,8 @@ type SelectedLineBreaks: TLineBreaks; procedure SetModified(NewVal: Boolean); public - function GetText: WideString; - procedure SetText(text: WideString); + function GetText: String; + procedure SetText(text: String); procedure SetMaxLength(len: integer); procedure SetFont(font: TFont); property Modified: Boolean read FModified write SetModified; @@ -59,9 +59,9 @@ uses main; {$R *.dfm} -function TfrmTextEditor.GetText: WideString; +function TfrmTextEditor.GetText: String; var - LB: WideString; + LB: String; begin Result := memoText.Text; // Convert linebreaks back to selected @@ -76,9 +76,9 @@ begin end; -procedure TfrmTextEditor.SetText(text: WideString); +procedure TfrmTextEditor.SetText(text: String); var - LB: WideString; + LB: String; Detected: TMenuItem; begin DetectedLineBreaks := ScanLineBreaks(text); diff --git a/source/trigger_editor.pas b/source/trigger_editor.pas index 335f7339..806fb385 100644 --- a/source/trigger_editor.pas +++ b/source/trigger_editor.pas @@ -34,7 +34,7 @@ type public { Public declarations } constructor Create(AOwner: TComponent); override; - procedure Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); override; + procedure Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); override; procedure ApplyModifications; override; end; @@ -72,7 +72,7 @@ begin end; -procedure TfrmTriggerEditor.Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); +procedure TfrmTriggerEditor.Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); var Definitions: TMySQLQuery; DBObjects: TDBObjectList; @@ -149,7 +149,7 @@ end; procedure TfrmTriggerEditor.ApplyModifications; var - sql: WideString; + sql: String; begin // Edit mode means we drop the trigger and recreate it, as there is no ALTER TRIGGER. try @@ -185,7 +185,7 @@ procedure TfrmTriggerEditor.SynCompletionProposalStatementExecute(Kind: SynCompl var CurrentInput: String; var x, y: Integer; var CanExecute: Boolean); var Proposal: TSynCompletionProposal; - Token: WideString; + Token: String; Columns: TMySQLQuery; begin // Propose column names from referencing table diff --git a/source/usermanager.pas b/source/usermanager.pas index 05a8a04a..6e96a418 100644 --- a/source/usermanager.pas +++ b/source/usermanager.pas @@ -401,7 +401,7 @@ var u: TUser; OneSelected, Enable: Boolean; t: TNotifyEvent; - pname: WideString; + pname: String; begin lblWarning.Visible := False; uid := comboUsers.ItemIndex; @@ -1267,7 +1267,7 @@ constructor TUsers.Create; var u: TUser; i: Integer; - user, host: WideString; + user, host: String; begin dsUser := Mainform.Connection.GetResults('SELECT * FROM '+db+'.'+Mainform.Mask(PRIVTABLE_USERS) + ' ORDER BY ' + Mainform.Mask('User')+', ' @@ -1711,7 +1711,7 @@ end; function TPrivilege.GetPrettyPrivNames: TWideStringList; var i: Integer; - p: WideString; + p: String; begin Result := TWideStringList.Create; for i := 0 to PrivNames.Count - 1 do begin diff --git a/source/view.pas b/source/view.pas index 157c37b1..f79c969f 100644 --- a/source/view.pas +++ b/source/view.pas @@ -29,7 +29,7 @@ type public { Public declarations } constructor Create(AOwner: TComponent); override; - procedure Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); override; + procedure Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); override; procedure ApplyModifications; override; end; @@ -56,10 +56,10 @@ end; {** FormShow: Fill controls with content in edit mode } -procedure TfrmView.Init(ObjectName: WideString=''; ObjectType: TListNodeType=lntNone); +procedure TfrmView.Init(ObjectName: String=''; ObjectType: TListNodeType=lntNone); var Results: TMySQLQuery; - db: WideString; + db: String; rx: TRegExpr; begin inherited;