ERRATA in the first, second or third printings of "The Firebird Book"

Last updated 3 September 2009

ISBN 1590592794
The ** column at the right indicates whether the item was caught and corrected in earlier reprints.

Chapter

Page

Erratum

**

1

11

The following text/code is incorrect:

2. You need....

add

LD_ASSUME_KERNEL=2.25

It should read:

add

LD_ASSUME_KERNEL=2.2.5

 

Y

1

13

In the sidebar marked CAUTION near the bottom of the page, the phrase "IPX/SX networks" should be "IPX/SPX networks" to be exactly correct.

N

1

17

Under the heading "Windows 9x, ME, and XP Home" the first sentence states "Windows 9x, ME, and XP Home do not support services." While true for Windows 9x and ME, it is not true of XP Home.

  1. Change the heading to "Windows 9x and ME"
  2. Change the text to "Windows 9x and ME do not support services."

N

2

33

The following text/code is incorrect in the third bullet under "Locating the HOSTS file":

o On Windows 95/98/ME/XP/Server2003, the HOSTS file is located in C:\Windows

It should read:

o On Windows XP/Server2003, the HOSTS file is located in C:\Windows\system32.

  • On Windows 95/98/ME, look in c:\Windows.

 

 

 

 

Y

Chapter

Page

Erratum

**

7

98

The example API category which states:
"Database Security (e.g. isc_attach_database())"
should be:
"Database Security (e.g. isc_add_user())"

Y

8

117

Under the heading "Pre-Defined Date Literals", the second sentence of the intro reads

"In dialect 1, the strings can be used directly; in dialect 3, they must be cast to type."

It should be changed to read

In legacy SQL, the strings could be used directly; in both dialects of Firebird, they must be cast to type in most situations."

Beneath Table 8-2, add the sentence:

"Any attempt to use a date literal in an expression without casting will cause an exception."

Y

8

118

The first sentence reads

"In a dialect 1 database, this statement returns exact server time:"

Change this to

"In legacy SQL, this statement would return exact server time:"

Change the sentence

"In a dialect 3 database, the date literal must be cast as a TIMESTAMP type:"

to

"In Firebird, the date literal must be cast as a TIMESTAMP type:"

The lead-in to the next example reads:

"This UPDATE statement sets a date column to server time plus one day in dialect 1:"

Change this (note MULTIPLE changes here) to

"Firebird still allows date literals to be used alone as the argument in UPDATE and INSERT statements and search criteria. This UPDATE statement sets a date column to server date plus one day:"

(Keep the current code example as-is).

[[continued...]]

The next body sentence reads:

"Here's the same operation in dialect 3, with casting;"

Change this to:

"In Firebird, using date literals in expressions will cause an exception. A clause such as <inline code> SET UPDATE_DATE = 'TODAY' + 1</inline code> will not work. Such expressions must be explicitly cast:"

Then, in the succeeding code example, the second line reads:

"SET UPDATE_DATE = CAST('TOMORROW' AS DATE) "

Change this to

"SET UPDATE_DATE = CAST('TODAY' AS DATE) + 1"

 

Y

Chapter

Page

Erratum

 

9

131

On the last example there is a closing parenthesis missing. It should read as follows:


SELECT GEN_ID(AGenerator, (

(SELECT GEN_ID(AGenerator, 0) from RDB$DATABASE) * - 1))

from RDB$DATABASE;

 

Y

9

139

The heading for the sidebar at the top of the page, "Numeric Input and Exponents" has somehow gotten the special format that was used for the expert topics. The whole sidebar should have the proper sidebar format to be consistent with all of the other sidebars in the book.

Y

10

146

In Table 10-3: For the year 98 row, 2998 should be 2098.

Y

10

147

The following text/code is incomplete:

For example, the date literal.....because there is no month 14.

It should read:

For example, the date literal.....because there is no month 14. However, 'CCYY/MM/DD' is accepted: '2004/12/31' will be interpreted as "31 December 2004".

 

Y

10

157

In Table 10.10. EXTRACT() Arguments, limits for YEARDAY appear as 1-366. Should be 0-365.

N

12

187

Under the heading "Defining Arrays, the sentence "For example, the following statement defines both a regular character column and ..."

This is inconsistent with the example shown. Change this part of the sentence so it reads sentence "For example, the following statement defines a 64-bit integer column and ..."

Y

Chapter

Page

Erratum

 

14

221

The last sentence of "TIP" section reads

"Ensure that all DML statements are committed before introducing any DML."

It should read :

"Ensure that all DDL statements are committed before introducing any DML."

Y

14

226

Script example in centre of page will not work because CREATE DATABASE arguments are in incorrect order.

The example code reads:

SET SQL DIALECT 3;

CREATE DATABASE 'd:\databases\MyDatabase.fdb'

PAGE_SIZE 8192

DEFAULT CHARACTER SET ISO8859_1

USER 'SYSDBA' PASSWORD 'masterkey';

It should be changed to:

SET SQL DIALECT 3;

CREATE DATABASE 'd:\databases\MyDatabase.fdb'

USER 'SYSDBA' PASSWORD 'masterkey'

PAGE_SIZE 8192

DEFAULT CHARACTER SET ISO8859_1 ;

N

16

290

The ALTER TABLE syntax pattern near the top of the page reads

ALTER TABLE name DROP colname [, colname ...];

It should read

ALTER TABLE name DROP colname [, DROP colname ...];

N

18

338

Halfway down table 18-3, the second sentence for the Description for the entry "Next transaction" reads

"The difference between the oldest active transaction and the next transaction determines when database sweeping occurs."

It should read :

"The difference between the oldest active transaction and the oldest snapshot transaction determines when database sweeping occurs."

 

 

Y

Chapter

Page

Erratum

 

21

420

Under minor heading "Arguments", it reads:

"WEEKDAY extracts the day of the week (having Sunday = 1, Monday = 2, and so on)..."

The phrase should read:

"WEEKDAY extracts the day of the week (having Sunday = 0, Monday = 1, and so on)..."

N

22

466

Near top of page, the code sample that reads:

SELECT ...

WHERE PARENT_COUNTRY = 'AU' OR 1=1

should be

SELECT ...

WHERE PARENT_COUNTRY = 'AU' OR 1=0

Y

31

644

Under "Syntax":

[DECLARE VARIABLE variable datatype;...]

should read:

[DECLARE [VARIABLE] variable datatype;...]

since the keyword VARIABLE is optional.

Y

32

667

 

 

 

 

 

 

 

 

 

 

 

 

 

668

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Figure 32.1 (text in graphic) 'MY_EXCEPTION' should read 'EXCEPTION MY_EXCEPTION'.

However, this is the wrong graphic, it seems Fig. 32.2. was plugged in there during production, since it is correct in the last proofs eyeballed by the author. Following is the correct 2794f3201.bmp:

(cont.) Figure 32.2, same error as was described for the (wrong) Fig. 32-1, corrected in 2 places (2794f3202.bmp)

Y

32

669

Beneath heading "The WHEN Statement" the passage between "A WHEN statement takes the form" and the paragraph starting with "<compound-statement> is one statement..." should be completely replaced with:

WHEN [EXCEPTION] <exception> DO <compound-statement>

where the EXCEPTION keyword is required for user-defined exceptions and <exception> can be any one of the following:

<exception-name> | GDSCODE code | SQLCODE code | ANY

Y

Chapter

Page

Erratum

 

32

684

The following text under the heading "Using POST_EVENT" is incorrect:

The parameter, event_name, can be....with a numeral. Event names are restricted to 15 characters.

It should read:

The parameter, event_name, can be....with a numeral. Event names are restricted to 64 characters.

 

Y

35

719

In the section headed Granting Privileges (that starts on P.718) an item is missing from the syntax pattern given in the line

<privilege> = INSERT | DELETE | etc.

Insert the symbol SELECT into the group so that line reads:

<privilege> = SELECT | INSERT | DELETE |

UPDATE [(column [,column [,...]] ) ] |

REFERENCES [(column [,column [,...]] ) ] | EXECUTE

N

38

819

in table 38-1, in the "SWITCH" column, the following is incorrect:

-pa[ssword] password

It should read

-pas[sword] password

 

Y

38

819, 824

In the "SWITCH" column of both tables, the following is incorrect:

-v[erbose]

should read

-v[erify]

 

Y

38

819, 824

In each table, in the "Effect" text for the –y switch, the references to "the –v[erbose] switch" should be corrected to "the –v[erify switch]".

Y

38

824

In table 38-2, in the "SWITCH" column, the following is incorrect:

-p[age_size] n

It should read

-pa[ge_size] n

[[ ... continued ... ]]

and pa[ssword] should be –pas[sword]

The leading hyphen is missing here, too.

 

 

 

 

Y

Chapter

Page

Erratum

 

38

826

Under the heading "Single Volume Backup to Mulitple-Volume Database" the examples are wrong.

Replace the POSIX example with the following:

.gbak -c /backups/stocks.fbk data/stocks_trial.fdb 500000

/data/stocks/stocks_trial.fd1 -user SYSDBA –password millp0nd

-v -y /logs/backups/stocks_r.20040703.log

Replace the Windows example with :

.gbak -c e:\backups\stocks.fbk d:\data\stocks_trial.fdb 500000

d:\data\stocks\stocks_trial.fd1 -user SYSDBA -password millp0nd

-v -y e:\logs\backups\stocks_r.20040703.log

Y

38

828

Under the heading "Using gbak with the Firebird Service Manager, the following is incorrect:

When you run gbak with the -service_mgr switch....

It should read

When you run gbak with the -service switch....

 

Y

38

829

Under the heading "Using gbak with the Firebird Service Manager, the following code sample is incorrect:

gbak -b -se hotchicken:service_mgr

hotchicken:d:\data\stocks.fdb

f:\backups\stocks.20040705.fbk

-v -y f:\backups\logs\stocks.20040715.log

It should read:

gbak -b -se hotchicken:service_mgr

d:\data\stocks.fdb

f:\backups\stocks.20040705.fbk

-v -y f:\backups\logs\stocks.20040715.log

Y

       

39

839

Section "Shutting down a database"

The gbak utility is improperly referenced (twice) as the means of shutting down and restarting a database. This should be the gfix utility instead.

 

Y

Chapter

Page

Erratum

 

39

841

Section "Qualifying Arguments"

The second example reads

gfix -sh -f 800

Because gfix has two switches starting with the letter 'f', this example will cause an error. It should read

gfix -sh -force 800

N

39

843

The following text/code is incorrect:

Under the heading "Changing the Database Dialect", the abbreviation for the gfix -sql_dialect switch is wrong in both places it is used:

gfix -s[ql_dialect] n db_name

should read

gfix -sql[_dialect] n db_name

and, beneath it:

./gfix -s 3 /data/accounts.fdb

should read

./gfix -sql 3 /data/accounts.fdb

 

 

 

Y

40

860

In Table 40-1, the following text is incorrect:

Prints out the lock table header block....lock resource type that you want to report on. Refer to Table 40-10 for the numbers.

It should read:

Prints out the lock table header block....lock resource type that you want to report on. Refer to Table 40-5 for the numbers.

 

Y

Appx I

 

On a few pages, "Linux" is misspelt as "Linus".
* Page 887 (IB_UDF)
* Page 891 (FBUDF)
* Page 892 (FBUDF)

Y