View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0000851 | Database Comparer | General | public | 2015-07-28 01:46 | 2019-04-18 19:46 |
| Reporter | shirokov | Assigned To | barry | ||
| Priority | high | Severity | major | Reproducibility | always |
| Status | closed | Resolution | fixed | ||
| Summary | 0000851: Ошибка при разборе хранимой процедуры в dbcIBParser.pas | ||||
| Description | В хранимой процедуре используется такая конструкция ((BIN_AND(DEVICE_TYPE, 0x1000001000000000) <> 0) OR (BIN_AND(DEVICE_TYPE, 0x1000002000000000) <> 0)) В dbcIBParser.pas идет анализ константы if (not HasSy) and (IBServerOptions.SQLServerVersion in [st_Firebird_25, st_Firebird_30]) then begin if (ch = '0') and ((CurCh()='x') or (CurCh()='X')) then begin // hex literal (integer) sy := IntValSy; GetChar(); GetChar(); StrVal := ''; while CharInSet(ch, ['0'..'9','A'..'F','a'..'f']) do begin StrVal := StrVal + ch; GetChar(); end; IntVal := StrToInt('$' + StrVal); HasSy := True; end Т.к. в нашем случае '$' + StrVal = $1000001000000000 - ошибка внутри StrToInt (AVal: Integer), not valid integer value, что очевидно. Но это полбеды: IntVal: Integer, а IntVal64 в классе, условно говоря, нет. | ||||
| Tags | No tags attached. | ||||