Issue Details (XML | Word | Printable)

Key: CORE-2026
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Vlad Khorsun
Reporter: pesser
Votes: 0
Watchers: 1
Operations

If you were logged in you would be able to see more operations.
Firebird Core

Problem with a read-only marked database and Firebird 2.1

Created: 01/Aug/08 08:51 AM   Updated: 29/Jun/11 12:45 PM
Component/s: Engine
Affects Version/s: 2.1.0, 2.5 Alpha 1, 2.1.1
Fix Version/s: 2.1.2, 2.5 Beta 1

Time Tracking:
Not Specified

Environment: Windows XP SP3, Windows Vista SP1
Issue Links:
Relate
 

Planning Status: Unspecified


 Description  « Hide
My Software has an option to archive older data to an read-only marked database which may be stored to a CD or DVD. I created a Viewer program using IBObjects that displays the data. That worked very well up to Firebird 2.0.3.

Now I moved to Firebird 2.1.1. On opening a query with TIBOQuery (IBObjects) I get following error message:

attempted update on read-only database.

I debugged the source code of IBObjects and found out that following statement is used before opening the Query:

SELECT F.RDB$FIELD_NAME F_FieldName
     , F.RDB$RELATION_NAME F_RelationName
     , F.RDB$DEFAULT_SOURCE F_DefaultSource
     , D.RDB$DEFAULT_SOURCE D_DefaultSource
     , D.RDB$FIELD_TYPE D_FieldType
FROM RDB$RELATION_FIELDS F INNER JOIN RDB$FIELDS D
  ON D.RDB$FIELD_NAME = F.RDB$FIELD_SOURCE
WHERE (( F.RDB$DEFAULT_SOURCE IS NOT NULL ) OR ( D.RDB$DEFAULT_SOURCE IS NOT NULL ))
  AND NOT F.RDB$RELATION_NAME STARTING WITH 'RDB$'
ORDER BY 1

I tried some combinitians and found out that follwing statement fails with that error message:

select *
from rdb$relation_fields
where rdb$default_source is not null)

when I change this to:

select *
from rdb$relation_fields
where rdb$default_source <> null)

everything works well. (I didn't knew before that this is allowed...)

I think this is a bug of Firebird 2.1

 All   Comments   Work Log   Change History   Version Control   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Vlad Khorsun added a comment - 04/Aug/08 03:41 AM
I can't reproduce it.
Are you able to reproduce it with isql ?

pesser added a comment - 04/Aug/08 06:25 AM
Hi Vlad,

thank you for your fast answer. Your right, the query works fine in iSQL. I made some more debugging in IBObjects and found out that the detching of a Dataset of table rdb$relation_fields with an filled rdb$default_source Blob seems to be the problem. The "workaround" with "<> null" doesn't work at all. This Query gives no datasets back and so there was no problem with fetching a dataset...

I could make a small sample application with IBObjects where the problem occurs or do you think I should ask Jason Wharton about this? As said before, with Firebird 2.0.3 and the same IBobjects-Version everything worked well...

Thanks Patrick

pesser added a comment - 04/Aug/08 06:48 AM - edited
Hi Vlad,

now I'm able to reproduce this in isql. Please follow the example:

isql
create table 'test.fdb' user 'sysdba' password 'masterkey' default character set ISO8859_1;
create table test (test integer default 0);
quit;

gfix test.fdb -mode read_only

isql
set names ISO8859_1;
connect 'test.fdb' user 'sysdba' password 'masterkey';
select * from rdb$relation_fields where rdb$default_source is not null;

<error>

The problem seems to be an read-only database with declared default values an using a character set at connection time.

I hope this helps.

Greetings Patrick

Vlad Khorsun added a comment - 10/Aug/08 07:00 AM
Since FB 2.1 engine performs transliteraion of blobs between character sets. In this case system blob, stored in UNICODE_FSS, transliterated into connection charset. To do this, temporary blob is created. Engine didn't support temporary blobs creation in read-only databases since read-only databases was introduced in IB6.

Pavel Cisar added a comment - 29/Jun/11 12:45 PM
QA test added.