- Recompilación en Delphi10 de todos los paquetes de RO para generar las DCU's en Lib\D10 - Recompilación en Delphi10 de todos los paquetes de DA para generar las DCU's en Lib\D10 git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.RemObjects@9 b6239004-a887-0f4b-9937-50029ccdca16
510 lines
17 KiB
ObjectPascal
510 lines
17 KiB
ObjectPascal
unit uDAMacroProcessors;
|
|
|
|
{----------------------------------------------------------------------------}
|
|
{ Data Abstract Library - Core Library }
|
|
{ }
|
|
{ compiler: Delphi 6 and up, Kylix 3 and up }
|
|
{ platform: Win32, Linux }
|
|
{ }
|
|
{ (c)opyright RemObjects Software. all rights reserved. }
|
|
{ }
|
|
{ Using this code requires a valid license of the Data Abstract }
|
|
{ which can be obtained at http://www.remobjects.com. }
|
|
{----------------------------------------------------------------------------}
|
|
|
|
{$I DataAbstract.inc}
|
|
|
|
interface
|
|
|
|
uses uDAEngine;
|
|
|
|
(*
|
|
Macros:
|
|
|
|
-------------------- Date --------------------
|
|
|
|
Returns the current date from the server
|
|
|
|
Syntax: {Date()}
|
|
Example: SELECT * FROM Table WHERE OrderDate>{Date()}
|
|
|
|
Parameters: this macro has no parameters
|
|
|
|
-------------------- Time --------------------
|
|
|
|
Returns the current time from the server
|
|
|
|
Syntax: {Time()}
|
|
Example: SELECT * FROM Table WHERE OrderDate>{Time()}
|
|
|
|
Parameters: this macro has no parameters
|
|
|
|
-------------------- DateTime --------------------
|
|
|
|
Returns the current datetime from the server
|
|
|
|
Syntax: {DateTime()}
|
|
Example: SELECT * FROM Table WHERE OrderDate>{DateTime()}
|
|
|
|
Parameters: this macro has no parameters
|
|
|
|
-------------------- AddTime --------------------
|
|
|
|
Returns a new datetime value based on adding an interval to the specified date.
|
|
Not all databases support this macro.
|
|
|
|
Syntax: {AddTime(<date>, <interval>, <interval_type>)}
|
|
Example: SELECT * FROM Table WHERE OrderDate>{AddTime(Date(), 2, day)}
|
|
|
|
Parameters: <date>: a valid date
|
|
<interval>: number of days, weeks, etc as per next parameter
|
|
<interval_type>: day, week, year, hour, min, sec
|
|
|
|
-------------------- FormatDateTime --------------------
|
|
|
|
Formats the specified datetime to the datetime format used by the database
|
|
|
|
Syntax: {FormatDateTime(<date>)}
|
|
Example: SELECT * FROM Table WHERE OrderDate>{FormatDateTime('12/22/2003 15:22:34.123')}
|
|
|
|
Parameters: <date>: a string expression representing a data in format MM/DD/YYYY HH24:MM:SS.MS
|
|
|
|
-------------------- FormatDate --------------------
|
|
|
|
Formats the specified date to the date format used by the database
|
|
|
|
Syntax: {FormatDateTime(<date>)}
|
|
Example: SELECT * FROM Table WHERE OrderDate>{FormatDate('12/22/2003')}
|
|
|
|
Parameters: <date>: a string expression representing a data in format MM/DD/YYYY
|
|
|
|
-------------------- Length --------------------
|
|
|
|
Returns the length of the given string
|
|
|
|
Syntax: {Length(<string>)}
|
|
Example: SELECT * FROM Table WHERE {Length(CustomerID)}>3
|
|
|
|
Parameters: <string>: a text string
|
|
|
|
-------------------- LowerCase --------------------
|
|
|
|
Converts the given string to lower case
|
|
|
|
Syntax: {LowerCase(<string>)}
|
|
Example: SELECT * FROM Table WHERE {LowerCase(CustomerID)}='alfki'
|
|
|
|
Parameters: <string>: a text string
|
|
|
|
-------------------- UpperCase --------------------
|
|
|
|
Converts the given string to upper case
|
|
|
|
Syntax: {UpperCase(<string>)}
|
|
Example: SELECT * FROM Table WHERE {UpperCase(CustomerID)}='ALFKI'
|
|
|
|
Parameters: <string>: a text string
|
|
|
|
-------------------- TrimLeft --------------------
|
|
|
|
Removes the leading spaces from a string
|
|
|
|
Syntax: {TrimLeft(<string>)}
|
|
Example: SELECT * FROM Table WHERE {TrimLeft(CustomerID)}='ALFKI'
|
|
|
|
Parameters: <string>: a text string
|
|
|
|
-------------------- TrimRight --------------------
|
|
|
|
Removes the trailing spaces from a string
|
|
|
|
Syntax: {TrimRight(<string>)}
|
|
Example: SELECT * FROM Table WHERE {TrimRight(CustomerID)}='ALFKI'
|
|
|
|
Parameters: <string>: a text string
|
|
|
|
-------------------- Copy --------------------
|
|
|
|
Returns <count> characters starting from <index> from <string>
|
|
|
|
Syntax: {Copy(<string>, <index>, <count>)}
|
|
Example: SELECT * FROM Table WHERE OrderDate>{Date()}
|
|
|
|
Parameters:
|
|
<string>: a field name or a string
|
|
<index>: the position from where to start copying
|
|
<count>: the number of characters to copy
|
|
|
|
-------------------- NoLockHint --------------------
|
|
|
|
Returns (NOLOCK) for MSSQL server and empty string for other databases
|
|
|
|
Syntax: {NoLockHint}
|
|
Example: SELECT * FROM Table {NoLockHint}
|
|
|
|
*)
|
|
|
|
type { TDAMSSQLMacroProcessor }
|
|
TDAMSSQLMacroProcessor = class(TDASQLMacroProcessor)
|
|
protected
|
|
function DateTime(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
function AddTime(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
function Length(Sender: TObject; const Parameters: array of string): string; override;
|
|
function LowerCase(Sender: TObject; const Parameters: array of string): string; override;
|
|
function UpperCase(Sender: TObject; const Parameters: array of string): string; override;
|
|
function TrimLeft(Sender: TObject; const Parameters: array of string): string; override;
|
|
function TrimRight(Sender: TObject; const Parameters: array of string): string; override;
|
|
function Copy(Sender: TObject; const Parameters: array of string): string; override;
|
|
function Nolock(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
public
|
|
constructor Create;
|
|
end;
|
|
TMSSQLMacroProcessor = TDAMSSQLMacroProcessor;
|
|
|
|
{ TDAIBMacroProcessor }
|
|
TDAIBMacroProcessor = class(TDASQLMacroProcessor)
|
|
protected
|
|
function DateTime(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
function AddTime(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
function Length(Sender: TObject; const Parameters: array of string): string; override;
|
|
function LowerCase(Sender: TObject; const Parameters: array of string): string; override;
|
|
function UpperCase(Sender: TObject; const Parameters: array of string): string; override;
|
|
function TrimLeft(Sender: TObject; const Parameters: array of string): string; override;
|
|
function TrimRight(Sender: TObject; const Parameters: array of string): string; override;
|
|
function Copy(Sender: TObject; const Parameters: array of string): string; override;
|
|
function Nolock(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
public
|
|
constructor Create;
|
|
end;
|
|
TIBMacroProcessor = TDAIBMacroProcessor;
|
|
|
|
{ TDAOracleMacroProcessor }
|
|
TDAOracleMacroProcessor = class(TDASQLMacroProcessor)
|
|
function DateTime(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
function AddTime(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
function Length(Sender: TObject; const Parameters: array of string): string; override;
|
|
function LowerCase(Sender: TObject; const Parameters: array of string): string; override;
|
|
function UpperCase(Sender: TObject; const Parameters: array of string): string; override;
|
|
function TrimLeft(Sender: TObject; const Parameters: array of string): string; override;
|
|
function TrimRight(Sender: TObject; const Parameters: array of string): string; override;
|
|
function Copy(Sender: TObject; const Parameters: array of string): string; override;
|
|
function FormatDate(Sender: TObject; const Parameters: array of string): string; override;
|
|
function FormatDateTime(Sender: TObject; const Parameters: array of string): string; override;
|
|
function Nolock(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
public
|
|
constructor Create;
|
|
end;
|
|
TOracleMacroProcessor = TDAOracleMacroProcessor;
|
|
|
|
{ TDADBISAMMacroProcessor }
|
|
TDADBISAMMacroProcessor = class(TDASQLMacroProcessor)
|
|
function DateTime(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
function AddTime(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
function Length(Sender: TObject; const Parameters: array of string): string; override;
|
|
function LowerCase(Sender: TObject; const Parameters: array of string): string; override;
|
|
function UpperCase(Sender: TObject; const Parameters: array of string): string; override;
|
|
function TrimLeft(Sender: TObject; const Parameters: array of string): string; override;
|
|
function TrimRight(Sender: TObject; const Parameters: array of string): string; override;
|
|
function Copy(Sender: TObject; const Parameters: array of string): string; override;
|
|
function Nolock(Sender: TObject; const Parameters: array of string): string; override;
|
|
|
|
public
|
|
constructor Create;
|
|
end;
|
|
TDBISAMMacroProcessor = TDADBISAMMacroProcessor;
|
|
|
|
implementation
|
|
|
|
uses SysUtils;
|
|
|
|
{ TDAMSSQLMacroProcessor }
|
|
|
|
constructor TDAMSSQLMacroProcessor.Create;
|
|
begin
|
|
inherited Create('yyyy-mm-dd', 'yyyy-mm-dd hh:nn:ss.zzz', FALSE, '@');
|
|
end;
|
|
|
|
function TDAMSSQLMacroProcessor.AddTime(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('dateadd(%s, %s, %s)', [Parameters[2], Parameters[1], Parameters[0]]);
|
|
end;
|
|
|
|
function TDAMSSQLMacroProcessor.Copy(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('substring(%s, %s, %s)', [Parameters[0], Parameters[1], Parameters[2]]);
|
|
end;
|
|
|
|
function TDAMSSQLMacroProcessor.DateTime(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'GetDate()';
|
|
end;
|
|
|
|
function TDAMSSQLMacroProcessor.Length(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'len(' + Parameters[0] + ')'
|
|
end;
|
|
|
|
function TDAMSSQLMacroProcessor.LowerCase(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'lower(' + Parameters[0] + ')'
|
|
end;
|
|
|
|
function TDAMSSQLMacroProcessor.TrimLeft(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'ltrim(' + Parameters[0] + ')'
|
|
end;
|
|
|
|
function TDAMSSQLMacroProcessor.TrimRight(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'rtrim(' + Parameters[0] + ')'
|
|
end;
|
|
|
|
function TDAMSSQLMacroProcessor.UpperCase(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'upper(' + Parameters[0] + ')'
|
|
end;
|
|
|
|
function TDAMSSQLMacroProcessor.Nolock(Sender: TObject; const Parameters: array of string): string;
|
|
begin
|
|
result := ' (NOLOCK) ';
|
|
end;
|
|
|
|
{ TDAIBMacroProcessor }
|
|
|
|
constructor TDAIBMacroProcessor.Create;
|
|
begin
|
|
inherited Create('yyyy-mm-dd', 'yyyy-mm-dd hh:mm:ss.zzz', FALSE);
|
|
end;
|
|
|
|
function TDAIBMacroProcessor.AddTime(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := '???'
|
|
end;
|
|
|
|
function TDAIBMacroProcessor.Copy(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('substring(%s from %s for %s)', [Parameters[0], Parameters[1], Parameters[2]]);
|
|
end;
|
|
|
|
function TDAIBMacroProcessor.DateTime(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := '(select current_timestamp from rdb$database)';
|
|
end;
|
|
|
|
function TDAIBMacroProcessor.Length(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('char_length(%s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDAIBMacroProcessor.LowerCase(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'lower(' + Parameters[0] + ')'
|
|
end;
|
|
|
|
function TDAIBMacroProcessor.TrimLeft(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'trim ( leading from ' + Parameters[0] + ')'
|
|
end;
|
|
|
|
function TDAIBMacroProcessor.TrimRight(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'trim ( trailing from ' + Parameters[0] + ')'
|
|
end;
|
|
|
|
function TDAIBMacroProcessor.UpperCase(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'upper(' + Parameters[0] + ')'
|
|
end;
|
|
|
|
function TDAIBMacroProcessor.Nolock(Sender: TObject; const Parameters: array of string): string;
|
|
begin
|
|
result := '';
|
|
end;
|
|
|
|
{ TDAOracleMacroProcessor }
|
|
|
|
constructor TDAOracleMacroProcessor.Create;
|
|
begin
|
|
inherited Create('MM/DD/YYYY', 'MM/DD/YYYY HH:MM:SS.ZZZ', FALSE);
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.FormatDate(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := StringReplace('TO_DATE(''' + Parameters[0] + ''', ''MM/DD/YYYY'')', '''''', '''', [rfReplaceAll]);
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.FormatDateTime(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := StringReplace('TO_DATE(''' + Parameters[0] + ''', ''MM/DD/YYYY HH24:MI:SS.FF3'')', '''''', '''', [rfReplaceAll]);
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.AddTime(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Parameters[0] + '+';
|
|
|
|
if SameText(Parameters[2], 'DAY') then
|
|
result := result + Parameters[1]
|
|
else if SameText(Parameters[2], 'WEEK') then
|
|
result := result + Parameters[1] + '*7'
|
|
else if SameText(Parameters[2], 'YEAR') then
|
|
result := result + Parameters[1] + '*365'
|
|
else if SameText(Parameters[2], 'HOUR') then
|
|
result := result + Parameters[1] + '/24'
|
|
else if SameText(Parameters[2], 'MIN') then
|
|
result := result + Parameters[1] + '/1440'
|
|
else if SameText(Parameters[2], 'SEC') then
|
|
result := result + Parameters[1] + '/86400';
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.Copy(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('SUBSTR(%s, %s, %s)', [Parameters[0], Parameters[1], Parameters[2]]);
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.DateTime(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'SYSDATE'
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.Length(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('LENGTH(%s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.LowerCase(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('LOWER(%s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.TrimLeft(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('TRIM(%s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.TrimRight(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('TRIM(%s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.UpperCase(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('UPPER(%s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDAOracleMacroProcessor.Nolock(Sender: TObject; const Parameters: array of string): string;
|
|
begin
|
|
result := '';
|
|
end;
|
|
{ TDADBISAMMacroProcessor }
|
|
|
|
constructor TDADBISAMMacroProcessor.Create;
|
|
begin
|
|
inherited Create('MM/DD/YYYY', 'MM/DD/YYYY HH:MM:SS.ZZZ', FALSE);
|
|
end;
|
|
|
|
function TDADBISAMMacroProcessor.AddTime(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Parameters[0] + '+';
|
|
|
|
if SameText(Parameters[2], 'DAY') then
|
|
result := result + Parameters[1]
|
|
else if SameText(Parameters[2], 'WEEK') then
|
|
result := result + Parameters[1] + '*7'
|
|
else if SameText(Parameters[2], 'YEAR') then
|
|
result := result + Parameters[1] + '*365'
|
|
else if SameText(Parameters[2], 'HOUR') then
|
|
result := result + Parameters[1] + '/24'
|
|
else if SameText(Parameters[2], 'MIN') then
|
|
result := result + Parameters[1] + '/1440'
|
|
else if SameText(Parameters[2], 'SEC') then
|
|
result := result + Parameters[1] + '/86400';
|
|
end;
|
|
|
|
function TDADBISAMMacroProcessor.Copy(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('SUBSTRING(%s FROM %s FOR %s)', [Parameters[0], Parameters[1], Parameters[2]]);
|
|
end;
|
|
|
|
function TDADBISAMMacroProcessor.DateTime(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := 'CURRENT_TIMESTAMP'
|
|
end;
|
|
|
|
function TDADBISAMMacroProcessor.Length(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('LENGTH(%s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDADBISAMMacroProcessor.LowerCase(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('LOWER(%s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDADBISAMMacroProcessor.TrimLeft(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('TRIM(LEADING '' '' FROM %s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDADBISAMMacroProcessor.TrimRight(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('TRIM(TRAILING '' '' FROM %s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDADBISAMMacroProcessor.UpperCase(Sender: TObject;
|
|
const Parameters: array of string): string;
|
|
begin
|
|
result := Format('UPPER(%s)', [Parameters[0]]);
|
|
end;
|
|
|
|
function TDADBISAMMacroProcessor.Nolock(Sender: TObject; const Parameters: array of string): string;
|
|
begin
|
|
result := '';
|
|
end;
|
|
|
|
end.
|
|
|