|
@@ -10,7 +10,7 @@ uses
|
|
|
{$ifdef KYLIX}
|
|
|
Libc,
|
|
|
{$endif}
|
|
|
-{$ifndef WIN32}
|
|
|
+{$ifndef WINDOWS}
|
|
|
dbf_wtil,
|
|
|
{$endif}
|
|
|
db,
|
|
@@ -26,7 +26,6 @@ type
|
|
|
private
|
|
|
FDbfFile: Pointer;
|
|
|
FFieldVarList: TStringList;
|
|
|
- FResultLen: Integer;
|
|
|
FIsExpression: Boolean; // expression or simple field?
|
|
|
FFieldType: TExpressionType;
|
|
|
FCaseInsensitive: Boolean;
|
|
@@ -40,7 +39,9 @@ type
|
|
|
procedure HandleUnknownVariable(VarName: string); override;
|
|
|
function GetVariableInfo(VarName: string): TDbfFieldDef;
|
|
|
function CurrentExpression: string; override;
|
|
|
+ procedure ValidateExpression(AExpression: string); virtual;
|
|
|
function GetResultType: TExpressionType; override;
|
|
|
+ function GetResultLen: Integer;
|
|
|
|
|
|
procedure SetCaseInsensitive(NewInsensitive: Boolean);
|
|
|
procedure SetRawStringFields(NewRawFields: Boolean);
|
|
@@ -56,21 +57,20 @@ type
|
|
|
|
|
|
property DbfFile: Pointer read FDbfFile write FDbfFile;
|
|
|
property Expression: string read FCurrentExpression;
|
|
|
- property ResultLen: Integer read FResultLen;
|
|
|
+ property ResultLen: Integer read GetResultLen;
|
|
|
|
|
|
property CaseInsensitive: Boolean read FCaseInsensitive write SetCaseInsensitive;
|
|
|
property RawStringFields: Boolean read FRawStringFields write SetRawStringFields;
|
|
|
property PartialMatch: boolean read FPartialMatch write SetPartialMatch;
|
|
|
end;
|
|
|
|
|
|
-
|
|
|
implementation
|
|
|
|
|
|
uses
|
|
|
dbf,
|
|
|
dbf_dbffile,
|
|
|
dbf_str
|
|
|
-{$ifdef WIN32}
|
|
|
+{$ifdef WINDOWS}
|
|
|
,Windows
|
|
|
{$endif}
|
|
|
;
|
|
@@ -103,22 +103,18 @@ type
|
|
|
TStringFieldVar = class(TFieldVar)
|
|
|
protected
|
|
|
FFieldVal: PChar;
|
|
|
+ FRawStringField: boolean;
|
|
|
|
|
|
function GetFieldVal: Pointer; override;
|
|
|
function GetFieldType: TExpressionType; override;
|
|
|
- end;
|
|
|
-
|
|
|
- TRawStringFieldVar = class(TStringFieldVar)
|
|
|
- public
|
|
|
- procedure Refresh(Buffer: PChar); override;
|
|
|
- end;
|
|
|
-
|
|
|
- TAnsiStringFieldVar = class(TStringFieldVar)
|
|
|
+ procedure SetRawStringField(NewRaw: boolean);
|
|
|
public
|
|
|
constructor Create(UseFieldDef: TDbfFieldDef; ADbfFile: TDbfFile);
|
|
|
destructor Destroy; override;
|
|
|
|
|
|
procedure Refresh(Buffer: PChar); override;
|
|
|
+
|
|
|
+ property RawStringField: boolean read FRawStringField write SetRawStringField;
|
|
|
end;
|
|
|
|
|
|
TFloatFieldVar = class(TFieldVar)
|
|
@@ -184,50 +180,61 @@ begin
|
|
|
FFieldName := UseFieldDef.FieldName;
|
|
|
end;
|
|
|
|
|
|
-//--TStringFieldVar-------------------------------------------------------------
|
|
|
-function TStringFieldVar.GetFieldVal: Pointer;
|
|
|
+//--TStringFieldVar---------------------------------------------------------
|
|
|
+constructor TStringFieldVar.Create(UseFieldDef: TDbfFieldDef; ADbfFile: TDbfFile);
|
|
|
begin
|
|
|
- Result := @FFieldVal;
|
|
|
+ inherited;
|
|
|
end;
|
|
|
|
|
|
-function TStringFieldVar.GetFieldType: TExpressionType;
|
|
|
+destructor TStringFieldVar.Destroy;
|
|
|
begin
|
|
|
- Result := etString;
|
|
|
-end;
|
|
|
+ if not FRawStringField then
|
|
|
+ FreeMem(FFieldVal);
|
|
|
|
|
|
-//--TRawStringFieldVar----------------------------------------------------------
|
|
|
-procedure TRawStringFieldVar.Refresh(Buffer: PChar);
|
|
|
-begin
|
|
|
- FFieldVal := Buffer + FieldDef.Offset;
|
|
|
+ inherited;
|
|
|
end;
|
|
|
|
|
|
-//--TAnsiStringFieldVar---------------------------------------------------------
|
|
|
-constructor TAnsiStringFieldVar.Create(UseFieldDef: TDbfFieldDef; ADbfFile: TDbfFile);
|
|
|
+function TStringFieldVar.GetFieldVal: Pointer;
|
|
|
begin
|
|
|
- inherited;
|
|
|
-
|
|
|
- GetMem(FFieldVal, UseFieldDef.Size+1);
|
|
|
+ Result := @FFieldVal;
|
|
|
end;
|
|
|
|
|
|
-destructor TAnsiStringFieldVar.Destroy;
|
|
|
+function TStringFieldVar.GetFieldType: TExpressionType;
|
|
|
begin
|
|
|
- FreeMem(FFieldVal);
|
|
|
-
|
|
|
- inherited;
|
|
|
+ Result := etString;
|
|
|
end;
|
|
|
|
|
|
-procedure TAnsiStringFieldVar.Refresh(Buffer: PChar);
|
|
|
+procedure TStringFieldVar.Refresh(Buffer: PChar);
|
|
|
var
|
|
|
Len: Integer;
|
|
|
+ Src: PChar;
|
|
|
begin
|
|
|
// copy field data
|
|
|
Len := FieldDef.Size;
|
|
|
- Move(Buffer[FieldDef.Offset], FFieldVal[0], Len);
|
|
|
+ Src := Buffer+FieldDef.Offset;
|
|
|
// trim right side spaces by null-termination
|
|
|
- while (Len >= 1) and (FFieldVal[Len-1] = ' ') do Dec(Len);
|
|
|
- FFieldVal[Len] := #0;
|
|
|
- // translate to ANSI
|
|
|
- TranslateString(DbfFile.UseCodePage, GetACP, FFieldVal, FFieldVal, Len);
|
|
|
+ if not FRawStringField then
|
|
|
+ begin
|
|
|
+ while (Len >= 1) and (Buffer[Len-1] = ' ') do Dec(Len);
|
|
|
+ FFieldVal[Len] := #0;
|
|
|
+ // translate to ANSI
|
|
|
+ TranslateString(DbfFile.UseCodePage, GetACP, Src, FFieldVal, Len);
|
|
|
+ end else
|
|
|
+ FFieldVal := Src;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TStringFieldVar.SetRawStringField(NewRaw: boolean);
|
|
|
+begin
|
|
|
+ if NewRaw = FRawStringField then exit;
|
|
|
+ FRawStringField := NewRaw;
|
|
|
+ if NewRaw then
|
|
|
+ begin
|
|
|
+ FExprWord.FixedLen := FieldDef.Size;
|
|
|
+ FreeMem(FFieldVal);
|
|
|
+ end else begin
|
|
|
+ FExprWord.FixedLen := -1;
|
|
|
+ GetMem(FFieldVal, FieldDef.Size*3+1);
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
//--TFloatFieldVar-----------------------------------------------------------
|
|
@@ -244,7 +251,7 @@ end;
|
|
|
procedure TFloatFieldVar.Refresh(Buffer: PChar);
|
|
|
begin
|
|
|
// database width is default 64-bit double
|
|
|
- if not FDbfFile.GetFieldDataFromDef(FieldDef, FieldDef.FieldType, Buffer, @FFieldVal) then
|
|
|
+ if not FDbfFile.GetFieldDataFromDef(FieldDef, FieldDef.FieldType, Buffer, @FFieldVal, false) then
|
|
|
FFieldVal := 0.0;
|
|
|
end;
|
|
|
|
|
@@ -262,7 +269,7 @@ end;
|
|
|
procedure TIntegerFieldVar.Refresh(Buffer: PChar);
|
|
|
begin
|
|
|
FFieldVal := 0;
|
|
|
- FDbfFile.GetFieldDataFromDef(FieldDef, FieldDef.FieldType, Buffer, @FFieldVal);
|
|
|
+ FDbfFile.GetFieldDataFromDef(FieldDef, FieldDef.FieldType, Buffer, @FFieldVal, false);
|
|
|
end;
|
|
|
|
|
|
{$ifdef SUPPORT_INT64}
|
|
@@ -280,7 +287,7 @@ end;
|
|
|
|
|
|
procedure TLargeIntFieldVar.Refresh(Buffer: PChar);
|
|
|
begin
|
|
|
- if not FDbfFile.GetFieldDataFromDef(FieldDef, FieldDef.FieldType, Buffer, @FFieldVal) then
|
|
|
+ if not FDbfFile.GetFieldDataFromDef(FieldDef, FieldDef.FieldType, Buffer, @FFieldVal, false) then
|
|
|
FFieldVal := 0;
|
|
|
end;
|
|
|
|
|
@@ -299,7 +306,7 @@ end;
|
|
|
|
|
|
procedure TDateTimeFieldVar.Refresh(Buffer: PChar);
|
|
|
begin
|
|
|
- if not FDbfFile.GetFieldDataFromDef(FieldDef, ftDateTime, Buffer, @FFieldVal) then
|
|
|
+ if not FDbfFile.GetFieldDataFromDef(FieldDef, ftDateTime, Buffer, @FFieldVal, false) then
|
|
|
FFieldVal.DateTime := 0.0;
|
|
|
end;
|
|
|
|
|
@@ -318,21 +325,14 @@ procedure TBooleanFieldVar.Refresh(Buffer: PChar);
|
|
|
var
|
|
|
lFieldVal: word;
|
|
|
begin
|
|
|
- if FDbfFile.GetFieldDataFromDef(FieldDef, ftBoolean, Buffer, @lFieldVal) then
|
|
|
+ if FDbfFile.GetFieldDataFromDef(FieldDef, ftBoolean, Buffer, @lFieldVal, false) then
|
|
|
FFieldVal := lFieldVal <> 0
|
|
|
else
|
|
|
FFieldVal := false;
|
|
|
end;
|
|
|
|
|
|
-
|
|
|
//--TDbfParser---------------------------------------------------------------
|
|
|
-(*
|
|
|
-var
|
|
|
- DbfWordsSensGeneralList, DbfWordsInsensGeneralList: TExpressList;
|
|
|
- DbfWordsSensPartialList, DbfWordsInsensPartialList: TExpressList;
|
|
|
- DbfWordsSensNoPartialList, DbfWordsInsensNoPartialList: TExpressList;
|
|
|
- DbfWordsGeneralList: TExpressList;
|
|
|
-*)
|
|
|
+
|
|
|
constructor TDbfParser.Create(ADbfFile: Pointer);
|
|
|
begin
|
|
|
FDbfFile := ADbfFile;
|
|
@@ -358,6 +358,26 @@ begin
|
|
|
Result := FFieldType;
|
|
|
end;
|
|
|
|
|
|
+function TDbfParser.GetResultLen: Integer;
|
|
|
+begin
|
|
|
+ // set result len for fixed length expressions / fields
|
|
|
+ case ResultType of
|
|
|
+ etBoolean: Result := 1;
|
|
|
+ etInteger: Result := 4;
|
|
|
+ etFloat: Result := 8;
|
|
|
+ etDateTime: Result := 8;
|
|
|
+ etString:
|
|
|
+ begin
|
|
|
+ if not FIsExpression and (TStringFieldVar(FFieldVarList.Objects[0]).RawStringField) then
|
|
|
+ Result := TStringFieldVar(FFieldVarList.Objects[0]).FieldDef.Size
|
|
|
+ else
|
|
|
+ Result := -1;
|
|
|
+ end;
|
|
|
+ else
|
|
|
+ Result := -1;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TDbfParser.SetCaseInsensitive(NewInsensitive: Boolean);
|
|
|
begin
|
|
|
if FCaseInsensitive <> NewInsensitive then
|
|
@@ -379,13 +399,16 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TDbfParser.SetRawStringFields(NewRawFields: Boolean);
|
|
|
+var
|
|
|
+ I: integer;
|
|
|
begin
|
|
|
if FRawStringFields <> NewRawFields then
|
|
|
begin
|
|
|
// clear and regenerate functions, custom fields will be deleted too
|
|
|
FRawStringFields := NewRawFields;
|
|
|
- if Length(Expression) > 0 then
|
|
|
- ParseExpression(Expression);
|
|
|
+ for I := 0 to FFieldVarList.Count - 1 do
|
|
|
+ if FFieldVarList.Objects[I] is TStringFieldVar then
|
|
|
+ TStringFieldVar(FFieldVarList.Objects[I]).RawStringField := NewRawFields;
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -438,16 +461,9 @@ begin
|
|
|
case FieldInfo.FieldType of
|
|
|
ftString:
|
|
|
begin
|
|
|
- if RawStringFields then
|
|
|
- begin
|
|
|
- { raw string fields have fixed length, not null-terminated }
|
|
|
- TempFieldVar := TRawStringFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
|
|
- TempFieldVar.FExprWord := DefineStringVariableFixedLen(VarName, TempFieldVar.FieldVal, FieldInfo.Size);
|
|
|
- end else begin
|
|
|
- { ansi string field function translates and null-terminates field value }
|
|
|
- TempFieldVar := TAnsiStringFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
|
|
- TempFieldVar.FExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
|
|
|
- end;
|
|
|
+ TempFieldVar := TStringFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
|
|
+ TempFieldVar.FExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
|
|
|
+ TStringFieldVar(TempFieldVar).RawStringField := FRawStringFields;
|
|
|
end;
|
|
|
ftBoolean:
|
|
|
begin
|
|
@@ -512,9 +528,11 @@ begin
|
|
|
FCurrentExpression := EmptyStr;
|
|
|
end;
|
|
|
|
|
|
+procedure TDbfParser.ValidateExpression(AExpression: string);
|
|
|
+begin
|
|
|
+end;
|
|
|
+
|
|
|
procedure TDbfParser.ParseExpression(AExpression: string);
|
|
|
-var
|
|
|
- TempBuffer: pchar;
|
|
|
begin
|
|
|
// clear any current expression
|
|
|
ClearExpressions;
|
|
@@ -525,39 +543,13 @@ begin
|
|
|
begin
|
|
|
// parse requested
|
|
|
CompileExpression(AExpression);
|
|
|
-
|
|
|
- // determine length of string length expressions
|
|
|
- if ResultType = etString then
|
|
|
- begin
|
|
|
- // make empty record
|
|
|
- GetMem(TempBuffer, TDbfFile(FDbfFile).RecordSize);
|
|
|
- try
|
|
|
- TDbfFile(FDbfFile).InitRecord(TempBuffer);
|
|
|
- FResultLen := StrLen(ExtractFromBuffer(TempBuffer));
|
|
|
- finally
|
|
|
- FreeMem(TempBuffer);
|
|
|
- end;
|
|
|
- end;
|
|
|
end else begin
|
|
|
// simple field, create field variable for it
|
|
|
HandleUnknownVariable(AExpression);
|
|
|
FFieldType := TFieldVar(FFieldVarList.Objects[0]).FieldType;
|
|
|
- // set result len of variable length fields
|
|
|
- if FFieldType = etString then
|
|
|
- FResultLen := TFieldVar(FFieldVarList.Objects[0]).FieldDef.Size
|
|
|
- end;
|
|
|
-
|
|
|
- // set result len for fixed length expressions / fields
|
|
|
- case ResultType of
|
|
|
- etBoolean: FResultLen := 1;
|
|
|
- etInteger: FResultLen := 4;
|
|
|
- etFloat: FResultLen := 8;
|
|
|
- etDateTime: FResultLen := 8;
|
|
|
end;
|
|
|
|
|
|
- // check if expression not too long
|
|
|
- if FResultLen > 100 then
|
|
|
- raise EDbfError.CreateFmt(STRING_INDEX_EXPRESSION_TOO_LONG, [AExpression, FResultLen]);
|
|
|
+ ValidateExpression(AExpression);
|
|
|
|
|
|
// if no errors, assign current expression
|
|
|
FCurrentExpression := AExpression;
|
|
@@ -585,180 +577,6 @@ begin
|
|
|
Result := PPChar(Result)^;
|
|
|
end;
|
|
|
end;
|
|
|
-(*
|
|
|
-initialization
|
|
|
-
|
|
|
- DbfWordsGeneralList := TExpressList.Create;
|
|
|
- DbfWordsInsensGeneralList := TExpressList.Create;
|
|
|
- DbfWordsInsensNoPartialList := TExpressList.Create;
|
|
|
- DbfWordsInsensPartialList := TExpressList.Create;
|
|
|
- DbfWordsSensGeneralList := TExpressList.Create;
|
|
|
- DbfWordsSensNoPartialList := TExpressList.Create;
|
|
|
- DbfWordsSensPartialList := TExpressList.Create;
|
|
|
-
|
|
|
- with DbfWordsGeneralList do
|
|
|
- begin
|
|
|
- // basic function functionality
|
|
|
- Add(TLeftBracket.Create('(', nil));
|
|
|
- Add(TRightBracket.Create(')', nil));
|
|
|
- Add(TComma.Create(',', nil));
|
|
|
-
|
|
|
- // operators - name, param types, result type, func addr, precedence
|
|
|
- Add(TFunction.CreateOper('+', 'SS', etString, nil, 40));
|
|
|
- Add(TFunction.CreateOper('+', 'FF', etFloat, FuncAdd_F_FF, 40));
|
|
|
- Add(TFunction.CreateOper('+', 'FI', etFloat, FuncAdd_F_FI, 40));
|
|
|
- Add(TFunction.CreateOper('+', 'IF', etFloat, FuncAdd_F_IF, 40));
|
|
|
- Add(TFunction.CreateOper('+', 'II', etInteger, FuncAdd_F_II, 40));
|
|
|
-{$ifdef SUPPORT_INT64}
|
|
|
- Add(TFunction.CreateOper('+', 'FL', etFloat, FuncAdd_F_FL, 40));
|
|
|
- Add(TFunction.CreateOper('+', 'IL', etLargeInt, FuncAdd_F_IL, 40));
|
|
|
- Add(TFunction.CreateOper('+', 'LF', etFloat, FuncAdd_F_LF, 40));
|
|
|
- Add(TFunction.CreateOper('+', 'LL', etLargeInt, FuncAdd_F_LI, 40));
|
|
|
- Add(TFunction.CreateOper('+', 'LI', etLargeInt, FuncAdd_F_LL, 40));
|
|
|
-{$endif}
|
|
|
- Add(TFunction.CreateOper('-', 'FF', etFloat, FuncSub_F_FF, 40));
|
|
|
- Add(TFunction.CreateOper('-', 'FI', etFloat, FuncSub_F_FI, 40));
|
|
|
- Add(TFunction.CreateOper('-', 'IF', etFloat, FuncSub_F_IF, 40));
|
|
|
- Add(TFunction.CreateOper('-', 'II', etInteger, FuncSub_F_II, 40));
|
|
|
-{$ifdef SUPPORT_INT64}
|
|
|
- Add(TFunction.CreateOper('-', 'FL', etFloat, FuncSub_F_FL, 40));
|
|
|
- Add(TFunction.CreateOper('-', 'IL', etLargeInt, FuncSub_F_IL, 40));
|
|
|
- Add(TFunction.CreateOper('-', 'LF', etFloat, FuncSub_F_LF, 40));
|
|
|
- Add(TFunction.CreateOper('-', 'LL', etLargeInt, FuncSub_F_LI, 40));
|
|
|
- Add(TFunction.CreateOper('-', 'LI', etLargeInt, FuncSub_F_LL, 40));
|
|
|
-{$endif}
|
|
|
- Add(TFunction.CreateOper('*', 'FF', etFloat, FuncMul_F_FF, 40));
|
|
|
- Add(TFunction.CreateOper('*', 'FI', etFloat, FuncMul_F_FI, 40));
|
|
|
- Add(TFunction.CreateOper('*', 'IF', etFloat, FuncMul_F_IF, 40));
|
|
|
- Add(TFunction.CreateOper('*', 'II', etInteger, FuncMul_F_II, 40));
|
|
|
-{$ifdef SUPPORT_INT64}
|
|
|
- Add(TFunction.CreateOper('*', 'FL', etFloat, FuncMul_F_FL, 40));
|
|
|
- Add(TFunction.CreateOper('*', 'IL', etLargeInt, FuncMul_F_IL, 40));
|
|
|
- Add(TFunction.CreateOper('*', 'LF', etFloat, FuncMul_F_LF, 40));
|
|
|
- Add(TFunction.CreateOper('*', 'LL', etLargeInt, FuncMul_F_LI, 40));
|
|
|
- Add(TFunction.CreateOper('*', 'LI', etLargeInt, FuncMul_F_LL, 40));
|
|
|
-{$endif}
|
|
|
- Add(TFunction.CreateOper('/', 'FF', etFloat, FuncDiv_F_FF, 40));
|
|
|
- Add(TFunction.CreateOper('/', 'FI', etFloat, FuncDiv_F_FI, 40));
|
|
|
- Add(TFunction.CreateOper('/', 'IF', etFloat, FuncDiv_F_IF, 40));
|
|
|
- Add(TFunction.CreateOper('/', 'II', etInteger, FuncDiv_F_II, 40));
|
|
|
-{$ifdef SUPPORT_INT64}
|
|
|
- Add(TFunction.CreateOper('/', 'FL', etFloat, FuncDiv_F_FL, 40));
|
|
|
- Add(TFunction.CreateOper('/', 'IL', etLargeInt, FuncDiv_F_IL, 40));
|
|
|
- Add(TFunction.CreateOper('/', 'LF', etFloat, FuncDiv_F_LF, 40));
|
|
|
- Add(TFunction.CreateOper('/', 'LL', etLargeInt, FuncDiv_F_LI, 40));
|
|
|
- Add(TFunction.CreateOper('/', 'LI', etLargeInt, FuncDiv_F_LL, 40));
|
|
|
-{$endif}
|
|
|
-
|
|
|
- Add(TFunction.CreateOper('=', 'FF', etBoolean, Func_FF_EQ , 80));
|
|
|
- Add(TFunction.CreateOper('<', 'FF', etBoolean, Func_FF_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'FF', etBoolean, Func_FF_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','FF', etBoolean, Func_FF_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','FF', etBoolean, Func_FF_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','FF', etBoolean, Func_FF_NEQ, 80));
|
|
|
- Add(TFunction.CreateOper('=', 'FI', etBoolean, Func_FI_EQ , 80));
|
|
|
- Add(TFunction.CreateOper('<', 'FI', etBoolean, Func_FI_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'FI', etBoolean, Func_FI_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','FI', etBoolean, Func_FI_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','FI', etBoolean, Func_FI_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','FI', etBoolean, Func_FI_NEQ, 80));
|
|
|
- Add(TFunction.CreateOper('=', 'II', etBoolean, Func_II_EQ , 80));
|
|
|
- Add(TFunction.CreateOper('<', 'II', etBoolean, Func_II_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'II', etBoolean, Func_II_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','II', etBoolean, Func_II_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','II', etBoolean, Func_II_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','II', etBoolean, Func_II_NEQ, 80));
|
|
|
- Add(TFunction.CreateOper('=', 'IF', etBoolean, Func_IF_EQ , 80));
|
|
|
- Add(TFunction.CreateOper('<', 'IF', etBoolean, Func_IF_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'IF', etBoolean, Func_IF_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','IF', etBoolean, Func_IF_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','IF', etBoolean, Func_IF_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','IF', etBoolean, Func_IF_NEQ, 80));
|
|
|
-{$ifdef SUPPORT_INT64}
|
|
|
- Add(TFunction.CreateOper('=', 'LL', etBoolean, Func_LL_EQ , 80));
|
|
|
- Add(TFunction.CreateOper('<', 'LL', etBoolean, Func_LL_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'LL', etBoolean, Func_LL_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','LL', etBoolean, Func_LL_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','LL', etBoolean, Func_LL_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','LL', etBoolean, Func_LL_NEQ, 80));
|
|
|
- Add(TFunction.CreateOper('=', 'LF', etBoolean, Func_LF_EQ , 80));
|
|
|
- Add(TFunction.CreateOper('<', 'LF', etBoolean, Func_LF_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'LF', etBoolean, Func_LF_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','LF', etBoolean, Func_LF_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','LF', etBoolean, Func_LF_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','FI', etBoolean, Func_LF_NEQ, 80));
|
|
|
- Add(TFunction.CreateOper('=', 'LI', etBoolean, Func_LI_EQ , 80));
|
|
|
- Add(TFunction.CreateOper('<', 'LI', etBoolean, Func_LI_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'LI', etBoolean, Func_LI_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','LI', etBoolean, Func_LI_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','LI', etBoolean, Func_LI_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','LI', etBoolean, Func_LI_NEQ, 80));
|
|
|
- Add(TFunction.CreateOper('=', 'FL', etBoolean, Func_FL_EQ , 80));
|
|
|
- Add(TFunction.CreateOper('<', 'FL', etBoolean, Func_FL_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'FL', etBoolean, Func_FL_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','FL', etBoolean, Func_FL_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','FL', etBoolean, Func_FL_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','FL', etBoolean, Func_FL_NEQ, 80));
|
|
|
- Add(TFunction.CreateOper('=', 'IL', etBoolean, Func_IL_EQ , 80));
|
|
|
- Add(TFunction.CreateOper('<', 'IL', etBoolean, Func_IL_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'IL', etBoolean, Func_IL_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','IL', etBoolean, Func_IL_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','IL', etBoolean, Func_IL_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','IL', etBoolean, Func_IL_NEQ, 80));
|
|
|
-{$endif}
|
|
|
-
|
|
|
- Add(TFunction.CreateOper('NOT', 'B', etBoolean, Func_NOT, 85));
|
|
|
- Add(TFunction.CreateOper('AND', 'BB', etBoolean, Func_AND, 90));
|
|
|
- Add(TFunction.CreateOper('OR', 'BB', etBoolean, Func_OR, 100));
|
|
|
-
|
|
|
- // Functions - name, description, param types, min params, result type, Func addr
|
|
|
- Add(TFunction.Create('STR', '', 'FII', 1, etString, FuncFloatToStr, ''));
|
|
|
- Add(TFunction.Create('STR', '', 'III', 1, etString, FuncIntToStr, ''));
|
|
|
- Add(TFunction.Create('DTOS', '', 'D', 1, etString, FuncDateToStr, ''));
|
|
|
- Add(TFunction.Create('SUBSTR', 'SUBS', 'SII', 3, etString, FuncSubString, ''));
|
|
|
- Add(TFunction.Create('UPPERCASE', 'UPPER', 'S', 1, etString, FuncUppercase, ''));
|
|
|
- Add(TFunction.Create('LOWERCASE', 'LOWER', 'S', 1, etString, FuncLowercase, ''));
|
|
|
- end;
|
|
|
-
|
|
|
- with DbfWordsInsensGeneralList do
|
|
|
- begin
|
|
|
- Add(TFunction.CreateOper('<', 'SS', etBoolean, FuncStrI_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'SS', etBoolean, FuncStrI_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','SS', etBoolean, FuncStrI_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','SS', etBoolean, FuncStrI_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','SS', etBoolean, FuncStrI_NEQ, 80));
|
|
|
- end;
|
|
|
-
|
|
|
- with DbfWordsInsensNoPartialList do
|
|
|
- Add(TFunction.CreateOper('=', 'SS', etBoolean, FuncStrI_EQ , 80));
|
|
|
-
|
|
|
- with DbfWordsInsensPartialList do
|
|
|
- Add(TFunction.CreateOper('=', 'SS', etBoolean, FuncStrIP_EQ, 80));
|
|
|
|
|
|
- with DbfWordsSensGeneralList do
|
|
|
- begin
|
|
|
- Add(TFunction.CreateOper('<', 'SS', etBoolean, FuncStr_LT , 80));
|
|
|
- Add(TFunction.CreateOper('>', 'SS', etBoolean, FuncStr_GT , 80));
|
|
|
- Add(TFunction.CreateOper('<=','SS', etBoolean, FuncStr_LTE, 80));
|
|
|
- Add(TFunction.CreateOper('>=','SS', etBoolean, FuncStr_GTE, 80));
|
|
|
- Add(TFunction.CreateOper('<>','SS', etBoolean, FuncStr_NEQ, 80));
|
|
|
- end;
|
|
|
-
|
|
|
- with DbfWordsSensNoPartialList do
|
|
|
- Add(TFunction.CreateOper('=', 'SS', etBoolean, FuncStr_EQ , 80));
|
|
|
-
|
|
|
- with DbfWordsSensPartialList do
|
|
|
- Add(TFunction.CreateOper('=', 'SS', etBoolean, FuncStrP_EQ , 80));
|
|
|
-
|
|
|
-finalization
|
|
|
-
|
|
|
- DbfWordsGeneralList.Free;
|
|
|
- DbfWordsInsensGeneralList.Free;
|
|
|
- DbfWordsInsensNoPartialList.Free;
|
|
|
- DbfWordsInsensPartialList.Free;
|
|
|
- DbfWordsSensGeneralList.Free;
|
|
|
- DbfWordsSensNoPartialList.Free;
|
|
|
- DbfWordsSensPartialList.Free;
|
|
|
-*)
|
|
|
end.
|
|
|
|