You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> CREATE DATABASE 'BUG.FDB';
SQL> CREATE TABLE T (TS TIMESTAMP);
SQL> COMMIT;
SQL> INSERT INTO T VALUES (CURRENT_DATE);
SQL> SELECT * FROM T;
SQL> COMMIT;
SQL> SELECT R.RDB$FIELD_TYPE, R.RDB$FIELD_LENGTH
CON> FROM RDB$FIELDS R
CON> WHERE R.RDB$FIELD_NAME =
CON> (SELECT RF.RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS RF
CON> WHERE RF.RDB$RELATION_NAME = 'T'
CON> AND RF.RDB$FIELD_NAME = 'TS');
-- the next statement was issued by one of GUI tools to change field type to DATE (instead of ALTER TABLE ALTER COLUMN)
SQL> UPDATE RDB$FIELDS R SET R.RDB$FIELD_TYPE = 12
CON> WHERE R.RDB$FIELD_NAME =
CON> (SELECT RF.RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS RF
CON> WHERE RF.RDB$RELATION_NAME = 'T'
CON> AND RF.RDB$FIELD_NAME = 'TS');
SQL> COMMIT;
SQL> SHOW TABLE T;
TS DATE Nullable
SQL> SELECT * FROM T;
SQL> SELECT R.RDB$FIELD_TYPE, R.RDB$FIELD_LENGTH
CON> FROM RDB$FIELDS R
CON> WHERE R.RDB$FIELD_NAME =
CON> (SELECT RF.RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS RF
CON> WHERE RF.RDB$RELATION_NAME = 'T'
CON> AND RF.RDB$FIELD_NAME = 'TS');
Submitted by: @hvlad
a) prepare bad database :
isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> CREATE DATABASE 'BUG.FDB';
SQL> CREATE TABLE T (TS TIMESTAMP);
SQL> COMMIT;
SQL> INSERT INTO T VALUES (CURRENT_DATE);
SQL> SELECT * FROM T;
=========================
2007-07-06 00:00:00.0000
SQL> COMMIT;
SQL> SELECT R.RDB$FIELD_TYPE, R.RDB$FIELD_LENGTH
CON> FROM RDB$FIELDS R
CON> WHERE R.RDB$FIELD_NAME =
CON> (SELECT RF.RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS RF
CON> WHERE RF.RDB$RELATION_NAME = 'T'
CON> AND RF.RDB$FIELD_NAME = 'TS');
RDB$FIELD_TYPE RDB$FIELD_LENGTH
============== ================
35 8
SQL> SHOW TABLE T;
TS TIMESTAMP Nullable
-- the next statement was issued by one of GUI tools to change field type to DATE (instead of ALTER TABLE ALTER COLUMN)
SQL> UPDATE RDB$FIELDS R SET R.RDB$FIELD_TYPE = 12
CON> WHERE R.RDB$FIELD_NAME =
CON> (SELECT RF.RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS RF
CON> WHERE RF.RDB$RELATION_NAME = 'T'
CON> AND RF.RDB$FIELD_NAME = 'TS');
SQL> COMMIT;
SQL> SHOW TABLE T;
TS DATE Nullable
SQL> SELECT * FROM T;
=========================
2007-07-06 00:00:00.0000
SQL> SELECT R.RDB$FIELD_TYPE, R.RDB$FIELD_LENGTH
CON> FROM RDB$FIELDS R
CON> WHERE R.RDB$FIELD_NAME =
CON> (SELECT RF.RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS RF
CON> WHERE RF.RDB$RELATION_NAME = 'T'
CON> AND RF.RDB$FIELD_NAME = 'TS');
RDB$FIELD_TYPE RDB$FIELD_LENGTH
============== ================
12 8
SQL> EXIT;
b) run gbak not using services API :
gbak -b -v localhost:bug.fdb bug.fbk
...
gbak: writing data for table T
gbak:0 records written
...
Table T of course contains records but none of them was put in backup !
c) run gbak using services API :
gbak -b -v bug.fdb bug.fbk -se service_mgr
...
gbak: ERROR:message length error (encountered 12, expected 8)
gbak: ERROR: gds_$receive failed
gbak:Exiting before completion due to errors
this is at least give the user chance to know about something weird with database
Commits: 2dccd27 caa5194
The text was updated successfully, but these errors were encountered: