I read with interest about the launch of Firebird 4 - and I noticed many fields which are all "CHAR(31) CHARACTER SET UNICODE_FSS" which appear to refer to object identifiers - but I also read this:
in the section "Complete in Beta 1"
Extended length of metadata identifiers
Metadata names longer than 31 bytes: new maximum length of object names is 63 characters.
and also here:
Section "Parameters to Restrict Length of Object Identifiers"
Object identifiers in an ODS 13 database can be up to 63 characters
in length, and the engine stores them in UTF-8, not UNICODE_FSS as
Now, I compiled FB4.0 from source as follows:
It's a standard g++ on Fedora 34
[pal@fedora fb4]$ g++ --version
g++ (GCC) 11.1.1 20210428 (Red Hat 11.1.1-1)
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
I have nothing like $FIREBIRD, $INTERBASE or anything related in my environment variables:
[pol@fedora fb4]$ env | grep -i fb
[pol@fedora fb4]$ env | grep -i interb
But, I didn't do a standard install - I ran make and make install, but I **_didn't** run make install as root - so, it did a few things and then failed by telling me that I had to be root (why??? - PostgreSQL has no such requirement - but that's another issue - not what I'm talking about today).
So I copied libEngine13.so and isql and put them into an independent directory and ran isql and created a database called blah.fdb - created a table "test" and put 2 records into it - commited and exited isql and then ran it again.
I was looking at the MON$ tables and noticed the situation below - it seems to me that most (all?) of these fields contain object identifiers and therefore should be ... CHAR(63) CHARACTER SET UTF-8... ? It seems like the RDB$ tables also have the same thing - didn't look at them all!
If this is not the right place for this issue, then please let me know!
SQL> SHOW TABLE mon$DATABASE;
MON$OWNER (RDB$USER) CHAR(31) CHARACTER SET UNICODE_FSS Nullable
SHOW TABLE mon$ATTACHMENTS;
MON$USER (RDB$USER) CHAR(31) CHARACTER SET UNICODE_FSS Nullable
MON$ROLE (RDB$USER) CHAR(31) CHARACTER SET UNICODE_FSS Nullable
SHOW TABLE mon$call_stack;
MON$PACKAGE_NAME (RDB$PACKAGE_NAME) CHAR(31) CHARACTER SET UNICODE_FSS Nullable
SHOW TABLE mon$table_stats;
MON$TABLE_NAME (RDB$RELATION_NAME) CHAR(31) CHARACTER SET UNICODE_FSS Nullable
SHOW TABLE rdb$fields;
RDB$FIELD_NAME (RDB$FIELD_NAME) CHAR(31) CHARACTER SET UNICODE_FSS Nullable
RDB$QUERY_NAME (RDB$FIELD_NAME) CHAR(31) CHARACTER SET UNICODE_FSS Nullable
RDB$OWNER_NAME (RDB$USER) CHAR(31) CHARACTER SET UNICODE_FSS Nullable