APPENDIX I External Function Summary
Conditional Logic Functions
FBUDF INULLIF (VALUE1, VALUE2) Linux, Win32 Returns NULL for a sub-expression if it resolves to a non-null value; otherwise, returns the value of the sub-expression. Applicable to flxed numeric types only and should be used only with Firebird l.O.x. With Firebird 1.5 and higher, use internal function NULLIF( ). Arguments valuel: The column or expression that is tobe evaluated. value2: A constant or expression with which valuel is to be compared. Ifthere is a match, the iNulllf expressionwill return NULL. Return value Will be NULL if valuel and value2 resolve to a match; if there is no match, then value l is returned. Notes iNulllf( ) has an effect equivalent to using the internal SQL function NULLIF(), implemented in Firebird 1.5 and higher, with flxed numeric types. The iNulllf() external function comes in three implementations: two for 32-bit and 16-bit types (inullif and dnullif), the other for 64-bit types (i64nullif). Ifyou wanttobe able to use it with any flxed numeric type, declare all implementations. The declarations can be found in the script fbudf.sql, in the /UDF directory ofyour Firebird installation. Do not declare the i64nullif implementation in any database that does not support 64-bit numeries-in an unported InterBase 5 database, for example. Example This Statement will cause the STOCK value in the PRODUCTS table to be set to NULL on all rows where it is currently stored as 0: UPDATE PRODUCTS SET STOCK = iNULLIF(STOCK, o) Related or similar See also NULLIF( ), sNulllf( ). functions
881 Appendix!
FBUDF INVL(VALUE1, VALUE2) Linux, Win32 This function attempts to mirnie the NVL( ) function of Oracle, for fiXed numerie types only. It will cause a specified non-null value tobe output if the column is actually storing a NULL. Arguments valuel: A column or expression involving a column. Floating-point typesarenot supported. Ifnecessary, use CAST() in your expression to transform the value to a numeric type. value2: An expression or constant that will resolve to the value which is to be output if value 1 resolves to NULL. Return value A non-null value. If valuel is not null, it is returned; otherwise, value2 is returned. Ifboth valuel and value2 resolve to NULL, then NULL is returned. Notes Logically, this function is equivalent to the simple form ofthe v.l.5 COALESCE( ) function when used with a column of a fixed numerie type, namely COALESCE(valuel, value2). It should be regarded as deprecated for versions of Firebird from 1.5 onward. The iNVL() external function comes in three implementations: two for 32-bit and 16-bit types (invl and dnvl), the other for 64-bit types (i64nvl). Ifyou wanttobe able to use itwith anyfixed numeric type, declare all implementations. The declarations can be found in the script tbudf.sql, in the /UDF directory ofyour Firebird installation. Do not declare the i64nvl implementation in any database that does not support 64-bit numeries-in an unported InterBase 5 database, for example. Example The following query outputs 0 if STOCK is NULL: SELECT PRODUCT_ID, PRODUCT_NAME, INVL(STOCK, o) FROM PRODUCTS; Related or similar See also sNVL( ), iNulllf( ), internal function COALESCE( ). functions
FBUDF SNULLIF (VALUE1, VALUE2) Linux, Win32 Returns NULLfora sub-expression ifit resolves to a non-null value; otherwise, returns the value of the sub-expression. Applicable to character types only and should be used only with Firebird l.O.x. With Firebird 1.5 and higher, use NULLIF(). Arguments valuel: The column or expression that is tobe evaluated. value2: A constant or expression with which valuel is to be compared. If there is a match, the sNulllf expression will return NULL.
882 External Function Summary
FBUDF SNULLIF (VALUE1, VALUE2) (continued) Return value Will be NULL if valuel and value2 resolve to a match. If there is no match, then valuel is returned. Notes sNullif() has an effect equivalent to using the internal SQL function NULLIF( ), implemented in Firebird 1.5 and higher, with character types. Example This query will set the column IS_REGISTERED to NULL in all rows where its value is 'T' and REGISTRATION_DATE is NULL: UPDATE ATABLE SET IS_REGISTERED = SNULLIF(IS_REGISTERED, 'T') WHERE REGISTRATION_DATE IS NULL; Related or similar See also iNulllf( ). For Firebird 1.5 and higher, see internal function functions NULLIF().
FBUDF SNVL(VALUE1, VALUE2) Linux, Win32 This function attempts to mirnie the NVL() function of Oracle, for character types only. It will cause a specified non-null value to be output if the column is actually storing a NULL. Arguments valuel: A column or expression involving a column. value2: An expression or constant that will resolve to the value that is to be output if valuel resolves to NULL. Return value A non-null value. If valuel is not null, it is returned; otherwise, value2 is returned. If both valuel and value2 resolve to NULL, then NULL is returned. Notes Logically, this function is equivalent to the simple form of the v.l.5 COALESCE() function when used with a column of a character type, namely COALESCE(valuel, value2). sNVL( ) should be regarded as deprecated for versions of Firebird from 1.5 onward. Example The following query calculates and outputs a runtime column, BIRTH_yEAR, for each student. Where this value resolves to NULL, the string "Not known" is output instead: SELECT FIRST_NAME, LAST_NAME, SNVL(CAST(EXTRACT(YEAR FROM BIRTH_DATE) AS VARCHAR(9)), 'Not known') AS BIRTH YEAR FROM STUDENT_REGISTER; Related or similar See also iNVL( ) , sNulllf(), internal function COALESCE( ) . functions
883 Appendix!
Mathematical Functions
IB_UDF ABS{VALUE) Linux, Win32 Returns the absolute value of a number. Arguments value is column or expression that is compatible with a signed or unsigned DOUBLE PRECISION NUMBER. Return value A DOUBLE PRECISION number. Example This statementwill calculate a total of values that are negative and return it as a positive value: SELECT ABS(SUM(ASSET_VALUE)) AS LIABILITY FROM ASSET REGISTER WHERE ASSET_VALUE < o; Similar function See f_DoubleAbs( )-another external function that performs the sametask.
IB_UDF BIN_AND{VALUE1, VALUE2) Linux, Win32 Returns the result of a bitwise AND operation performed on the two input values. Arguments valuel and value2 are columns or expressions that evaluate to SMALLINT or INTEGER type. Return value An INTEGER number. Example SELECT BIN_AND(128,24) AS ANDED RESULT FROM RDB$DATABASE;
IB_UDF BIN_OR{VALUE1, VALUE2) Linux, Win32 Returns the result of a binary (bitwise) OR operation performed on the two input values. Arguments valuel and value2 are columns or expressions that evaluate to SMALLINT or INTEGER type. Return value An INTEGER number. Example SELECT BIN_OR(128,24) AS ORED_RESULT FROM RDB$DATABASE;
IB_UDF BIN_XOR{VALUE1, VALUE2) Linux, Win32 Returns the result of a binary (bitwise exclusive or) XOR operation performed on the two input values. Arguments valuel and value2 are columns or expressions that evaluate to SMALLINT or INTEGER type.
884 Externat Function Summary
IB_UDF BIN_XOR(VALUE1, VALUE2) (continued) Return value An INTEGER number. Example SELECT BIN_XOR(128,24) AS EXORED_RESULT FROM RDB$DATABASE;
IB_UDF CEILING(VALUE) Linux, Win32 Returns a DOUBLE PRECISION value representing the smallest integer that is greater than or equal to the input value. Arguments value is a column or expression that evaluates to a number of DOUBLE PRECISION type. Return value A DOUBLE PRECISION number with a zero decimal part. Example SELECT CEILING(LAST_TOTAL) AS ROUND_UP_NEAREST FROM SALES_HISTORY;
IB_UDF DIV(VALUE1, VALUE2) Linux, Win32 Divides the two integer inputs and returns the quotient, discarding the decimal part. Arguments valuel and value2 are columns or expressions that evaluate to numbers of SMALLINT or INTEGER type. Return value A DOUBLE PRECISION number with a zero decimal part. Notes The function behaves almost like integer-by-integer division in databases created in dialect 3-the distinction being that the division returns a double. Example SELECT DIV(TERM, (CURRENT_DATE - START_DATE)/365) AS YEARS REMAINING FROM MORTGAGE ACCOUNT WHERE ACCOUNT_ID = 12345;
FBUDF DPOWER(VALUE, EXPONENT) Linux, Win32 Takes a number and an exponent and returns to exponential value. Arguments value: A column or expression that evaluates to a number of type DOUBLE PRECISION. exponent A column or expression that evaluates to a number of type DOUBLE PRECISION. Return value Returns the exponential value as a DOUBLE PRECISION number. Example SELECT DPOWER(2.64575,2) AS NEARLY_7 FROM RDB$DATABASE; Related or similar See also SQRT( ). functions
885 Appendix!
FREEUDFLIB F_DOUBLEABS(VALUE} Win32 Returns the absolute value of a floating-point number. Arguments value is a column or expression that evaluates to a nurober of type DOUBLE PRECISION or FLOAT. Return value A positive nurober oftype DOUBLE PRECISION. Example SELECT ABS(SUM(ASSET_VALUE)) AS LIABILITY FROM ASSET REGISTER WHERE ASSET_VALUE < 0; Related or similar See also ABS( ), another external function that performs the same functions task and is available on non-Windows platforms.
FREEUDFLIB F_ISDVISIBLEBY(VALUE1, VALUE2} Win32 Determines whether a value is evenly divisibly by another value. Returns 1 if Numerator (valuel) is evenly divisible by Denominator (value2); otherwise, returns 0. Arguments valuel: A column or expression that evaluates to an integer type, the nurober that is be divided (the numerator). value2: Another integer, the nurober to use as the denominator. Return value Returns 1 ifTrue, 0 ifFalse. Example This function could be called in a CHECK constraint as follows: ALTER TABLE ORDER DETAIL ADD CONSTRAINT CHECK MULTIPLE CHECK (ISDIVISIBLEBY(ORDER_QTY, PACK_QTY) = 1); Such a check might be used for validation where multiple pre• packaged units are priced on a per-unit basis, rather than per-pack.
FREEUDFLIB F_MODULO(VALUE1, VALUE2) Win32 Modulo function-returns the remainder from a division between two integers. Arguments valuel and value2 are columns or expressions that evaluate to numbers of SMALLINT or INTEGER type. Return value A nurober of an integer type. Notes This version ofthe modulo() function might be more useful than MOD() in complex expressions where the return value is part of another expression that operates on an integer. (MOD() returns a floating-point number.) Example A snippet from a trigger: ... IF (MODULO(NEW.HOURS * 100, 775) > 0.25) THEN NEW.OVERTIME_HOURS = MODULO(NEW.HOURS * 100, 775) I 100; Related or similar See also MOD( ), which returns a floating-point result. functions
886 External Function Summary
FREEUDFLIB F_ROUNDFLOAT(VALUE1, VALUE2} Win32 Attempt to round the passed value up or down to the nearest specified fraction. Arguments valuel: A column or expression that evaluates to a floating-point type. This is the number to be rounded. value2: A column or expression that evaluates to a floating-point type. This must be a number less than 1 and greater than 0. For example, pass a value2 of 0.25 to round to the nearest quarter. Return value A floating-point number, which will be valuel rounded up or down to the nearest specified value2 fraction. Example The following statement calculates PAlD _HO URS by rounding HO URS_WORKED up or down to the nearest quarter-hour: UPDATE TIMESHEET SET PAID_HOURS = F_ROUNDFLOAT(HOURS_WORKED, 0.25) WHERE DATE_TIMESTAMP > CURRENT_DATE - 7; Related or similar See also ROUND( ). functions
FREEUDFLIB F_TRUNCATE(VALUE} Win32 Truncates a floating-point value to an integer. Arguments value is a column or expression that evaluates to a floating-point type. Return value Strips the decimal part from value and returns the whole-number part as an integer type. Example This statementwill return an integer: SELECT F_TRUNCATE(SUM(AMT_OUTSTANDING)) AS ESTIMATED_DEBTORS FROM ACCOUNT WHERE AMT_OUTSTANDING > o; Related or similar See also TRUNCATE( ), ROUND( ). functions
IB_UDF FLOOR(VALUE} Linux, Win32 Returns a floating-point value representing the largest integer that is less than or equal to value. Arguments value is a column or expression that evaluates to a number of DOUBLE PRECISION type. Return value A DOUBLE PRECISION number with a zero decimal part. Example SELECT FLOOR(CURRENT_DATE - START_DATE) AS DAYS_ELAPSED FROM DVD_LOANS;
887 Appendix!
IB_UDF LN{VALUE) Linux, Win32 Returns the naturallogarithm of a number. Arguments value is a column or expression that evaluates to a number of DOUBLE PRECISION type. Return value A DOUBLE PRECISION number. Example SELECT LN((CURRENT_TIMESTAMP - LEASE_DATE)/7) AS NLOG_WEEKS FROM LEASE_ACCOUNT;
IB_UDF LOG{VALUE1, VALUE2) Linux, Win32 Returns the logarithm base x=valuel of number y=value2. Arguments valuel (the logarithm base) and value2 (the number tobe operated on) are columns or expressions that evaluate to numbers ofDOUBLE PRECISION type. Return value A DOUBLE PRECISION number. Notes The Firebird l.O.x and InterBase versions of this function have a bug: LOG ( x, y) erroneously inverts the arguments and returns the log base y of number x. It was corrected in v.l.5. Be aware that older stored pro• cedures and application code may have workaround code for the bug. Example SELECT LOG(8, (CURRENT_TIMESTAMP - LEASE_DATE)/7)) AS LOG_WEEKS FROM LEASE_ACCOUNT;
IB_UDF LOG10{VALUE) Linux, Win32 Returns the logarithm base 10 of the input value. Arguments value is a column or expression that evaluates to a number of DOUBLE PRECISION type. Return value A DOUBLE PRECISION number. Example SELECT LOG10((CURRENT_TIMESTAMP - LEASE_DATE)/7) AS LOG10_WEEKS FROM LEASE_ACCOUNT;
IB_UDF MODULO{VALUE1, VALUE2) Linux, Win32 Modulo function-returns the remainder from a division between two integers. Arguments valuel and value2 are columns or expressions that evaluate to numbers of SMALLINT or INTEGER type. Return value A DOUBLE PRECISION number. Example A snippet from a trigger: .•. IF (MODULO(NEW.HOURS * 100, 775) > 25.0) THEN NEW.OVERTIME_HOURS = MODULO(NEW.HOURS * 100, 775) I 100; Related or See also f_Modulo(), which returns an integer. similar functions
888 Externat Function Summary
IB_UDF PI() Linux, Win32 Returns the value of? = 3.14159 ... Arguments No arguments, but parentheses are required. Return value The value of ?, as a DOUBLE PRECISION number. Example SELECT PI() AS PI_VALUE FROM RDB$DATABASE;
IB_UDF RAND() Linux, Win32 Returns a random number between 0 and 1. Note that this function does not work in Firebird 1.5. Arguments No arguments, but parentheses are required. Return value A DOUBLE PRECISION number. Notes The current time is used to seed the random number generator. Example SELECT RAND() AS RANDOM_NUMBER FROM RDB$DATABASE;
FBUDF ROUND (VALUE) Linux, Win32 Rounds a flxed numeric number up or down to the nearest integer. Arguments value is a column or expression that evaluates to a flxed numeric type with a scale > 0. Return value A number of an integer type. Notes This is plain rounding-if the digit immediately to the right of the decimal is equal to or greater than 5, it adds 1 to the digit at the left of the decimal point, and then truncates any digits to the right. Otherwise, it truncates all digits to the right of decimal point. Example The following statement calculates an estimate based on the result of rounding the product of two NUMERIC(11,2) numbers up or down: SELECT JOB_NO, ROUND(RATE * HOURS) + 1 AS ESTIMATE FROM QUOTATION WHERE RATE IS NOT NULL AND HOURS IS NOT NULL; Related or similar See also TRUNCATE( ), F_ROUNDFLOAT( ). functions
IB_UDF SIGN(VALUE) Linux, Win32 Returns 1, 0, or -1 depending on whether the input value is positive, zero, or negative, respectively. Arguments value is a column or expression that evaluates to a number of DOUBLE PRECISION type. Return value A DOUBLE PRECISION number. Example A snippet from a trigger: ... IF (SIGN(NEW.CURRENT_VALUE) < 1) THEN ... ' 889 Appendix!
IB_UDF SQRT(VALUE) Linux, Win32 Returns the square root of a number. Arguments value is a column or expression that evaluates to a number of DOUBLE PRECISION type. Return value A DOUBLE PRECISION number. Example A snippet from a trigger: ... IF (SQRT(NEW.HYPOTENUSE) = SQRT(NEW.SIDEl) + SQRT(NEW.SIDE2)) THEN NEW.RIGHT_ANGLED_TRIANGLE = 'T';
FBUDF TRUNCATE (VALUE) Linux, Win32 Truncates a fiXed numeric type to the next lowest integer. Arguments value is a column or expression that evaluates to a fixed numeric type with a scale > 0. Return value A number of an integer type. Not es As with some other functions in this library, you need to make two declarations to get "coverage" for both 32-bit and 64-bit inputs. Check the declarations in the script fdudf.sql for truncate and i64truncate. Example The following statement calculates an estimate based on the result of truncating the product oftwo NUMERlC(ll,2) numbers: SELECT JOB_NO, TRUNCATE(RATE * HOURS) + 1 AS ESTIMATE FROM QUOTATION WHERE RATE IS NOT NULL AND HOURS IS NOT NULL; Related or similar See also ROUND( ), F_TRUNCATE(). functions
Date and Time Functions
FBUDF DOW(VALUE) Linux, Win32 Takes a TIMESTAMP and returns the day of the week (in English) as a mixed-case string. Arguments value is a column or expression that evaluates to a TIMESTAMP type. Return value 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', or 'Sunday'. Example This statement adds four days and returns the day of the week forthat adjusted date: SELECT DOW(CURRENT_DATE + 4) FROM RDB$DATABASE; Related or similar See also SDOW( ), internal function EXTRACT( ). functions
890 External Function Summary
FBUDF SDOW(VALUE) Linux Win32 Takes a TIMESTAMP and returns the day of the week (in English) as an abbreviated mixed-case string. Arguments value is a column or expression that evaluates to a TIMESTAMP type. Return value 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', or 'Sun'. Example This statement adds 4 days and returns the day of the week forthat adjusted date: SELECT DOW(CURRENT_DATE + 4) FROM RDB$DATABASE; Related or similar See also DOW( ), internal function EXTRACT( ). functions
FBUDF ADDDAY(VALUE1, VALUE2) Linux, Win32 Adds a whole number of days to a date or time type value and returns the adjusted date as a TIMESTAMP. Arguments valuel: A column or expression that evaluates to a date or time type. value2: Number of days to add (integer) or an integer expression. Return value Adjusted TIMESTAMP (equivalent to valuel + value2). Not es If the input is a TIME type, the days are added to that time of day on the current date. If it is a DATE type, the time of day will be midnight. Example This statement adds 4 days and returns the adjusted date and time as midnight, 4 days later: SELECT ADDDAY(CURRENT_DATE, 4) FROM RDB$DATABASE; Related or similar See also ADDHOUR( ), ADDMINUTE( ), etc. functions
FBUDF ADDHOUR(VALUE1, VALUE2) Linux, Win32 Adds a whole number of hours to a date or time type value and returns the adjusted date as a TIMESTAMP. Arguments valuel: A column or expression that evaluates to a date or time type. value2: Number ofhours to add (integer) or an integer expression. Return value Adjusted TIMESTAMP (equivalent to value 1 + (value 2112)). Notes If the input is a TIME type, the hours are added to that time of day on the current date. If it is a DATE type, they are added to midnight of the current date. Example This statement adds 10 hours and returns the adjusted date and time: SELECT ADDHOUR(CURRENT_TIMESTAMP, 10) FROM RDB$DATABASE; Related or similar See also ADDDAY( ), ADDMINUTE( ), etc. functions
891 Appendix!
FBUDF ADDMILLISECOND{VALUE1, VALUE2) Linux, Win32 Adds a whole number of milliseconds to a date or time type value and returns the adjusted date as a TIMESTAMP. Arguments valuel: A column or expression that evaluates to a date or time type. value2: Number of milliseconds to add (integer) or an integer expression. Return value TIMESTAMP. Notes If the input is a TIME type, the milliseconds are added to that time of day on the current date. If it is a DATE type, the input time of day will be midnight. Example This statement adds 61,234 milliseconds to the current system time. It effectively adds the milliseconds to the current system timestamp: SELECT ADDMILLISECOND(CURRENT_TIME, 61234) FROM RDB$DATABASE; Related or similar See also ADDDAY( ), ADDMINUTE(), etc. functions
FBUDF ADDMINUTE(VALUE1, VALUE2) Linux, Win32 Adds a whole number of rninutes to a date or time type value and returns the adjusted date as a TIMESTAMP. Arguments valuel: A column or expression that evaluates to a date or time type. value2: Number of minutes to add (integer) or an integer expression. Return value TIMESTAMP. Notes If the input is a TIME type, the minutes are added to that time of day on the current date. If it is a DATE type, the input time of day will be midnight. Example This statement adds 45 minutes to the current system time. It effectively adds the rninutes to the current system timestamp: SELECT ADDMINUTE(CURRENT_TIME, 45) FROM RDB$DATABASE; Related or similar See also ADDDAY( ), ADDSECOND( ), etc. functions
FBUDF ADDMONTH(VALUE1, VALUE2) Linux, Win32 Adds a whole number of months to a date or time type value and returns the adjusted date as a TIMESTAMP. Arguments valuel: A column or expression that evaluates to a TIMESTAMP type. value2: Number ofmonths to add (integer) or an integer expression. Return value An adjusted TIMESTAMP that is (value2) calendar months later than valuel.
892 External Function Summary
FBUDF ADDMONTH{VALUE1, VALUE2) (continued) Notes Ifthe inputisaTIME type, the months are added tothat time of day on the current date. If it is a DATE type, the input time of day will be midnight. Example This statement uses ADDMONTH() to calculate the term for a contract: UPDATE CONTRACT SET FINAL - DATE CASE CONTRACT TERM WHEN 'HALF-YEARLY' THEN ADDMONTH(START_DATE, 6) WHEN 'YEARLY' THEN ADDMONTH(START_DATE, 12) ELSE ADDWEEK(START_DATE, TRUNCATE(CONTRACT_AMT/WEEKLY_FEE)) END WHERE START DATE IS NOT NULL AND AMT PAID IS NOT NULL AND WEEKLY FEE IS NOT NULL AND CONTRACT_ID = 12345; Related or similar See also ADDDAY(), ADDYEAR(), etc. functions
FBUDF ADDSECOND(VALUE1 , VALUE2) Linux, Win32 Adds a whole number of seconds to a date or time type value and returns the adjusted date as a TIMESTAMP. Arguments valuel: A column or expression that evaluates to a date or time type. value2: Number of seconds to add (integer) or an integer expression. Return value TIMESTAMP. Notes Ifthe inputisaTIME type, the seconds are added tothat time of day on the current date. If it is a DATE type, the inputtime of day will be midnight. Example This statement adds 120 seconds to the current system date. 1t effectively adds the seconds to midnight of the current system date: SELECT ADDSECOND(CURRENT_DATE, 120) FROM RDB$DATABASE; Related or similar See also ADDMONTH( ), ADDMILLISECOND( ), etc. functions
FBUDF ADDWEEK(VALUE1, VALUE2} Linux, Win32 Adds a whole number of weeks to a date or time type value and returns the adjusted date as a TIMESTAMP. Arguments valuel: A column or expression that evaluates to a date or time type. value2: Number ofweeks to add (integer) or an integer expression. Return value Adjusted TIMESTAMP (equivalent to value 1 + (7 * value 2). continued
893 Appendix/
FBUDF ADDWEEK(VALUE1, VALUE2) Not es If the input is a TIME type, the weeks are added to that time of day on the current date. If it is a DATE type, the input time of day will be midnight. Example This statement calculates how many weeks' fees were paid, and uses it with ADDWEEK( ) to calculate the final date of a contract: UPDATE CONTRACT SET FINAL_DATE = ADDWEEK(START_DATE, TRUNCATE(CONTRACT_AMT/WEEKLY_FEE)) WHERE START DATE IS NOT NULL AND AMT PAID IS NOT NULL AND WEEKLY FEE IS NOT NULL AND CONTRACT_ID = 12345; Related or similar See also ADDDAY( ), ADDMONTH( ), etc. functions
FBUDF ADDYEAR(VALUE1, VALUE2) Linux, Win32 Adds a whole number of years to a date or time value and returns the adjusted date as a TIMESTAMP. Arguments valuel: A column or expression that evaluates to a date or time type. value2: Number ofyears to add (integer) or an integer expression. Return value Adjusted TIMESTAMP. Notes If the input is a TIME type, the years are added to that time of day on the current date. If it is a DATE type, the inputtime of day will be midnight. · Example This statement calculates the final date of a lease, given the starting date: UPDATE LEASE SET FINAL_DATE = ADDYEAR(START_DATE, 5) WHERE START DATE IS NOT NULL AND LEASE_ID = 12345; Related or similar See also ADDDAY( ), ADDMONTH( ), etc. functions
FBUDF GETEXACTTIMESTAMP( ) Linux, Win32 Returns the system time as a TIMESTAMP, to the nearest millisecond. Arguments No arguments. Return value Returns a TIMESTAMP. Not es The date and time context variable CURRENT_TIMESTAMP and the predefined date literal 'NOW' return systemtime only to the nearest second. GETEXACTTIMESTAMP() is currently the only way to get the exact system time. Example This statement returns the exact timestamp: SELECT GETEXACTTIMESTAMP() AS TSTAMP FROM RDB$DATABASE;
894 External Function Summary
FREEUDFLIB F_AGEINDAVS(VALUE1, VALUE2} Win32 Computes the age in days of a date (valuel) with reference to another date (value2). Typically, the reference date would be the current date, but it need not be. For exarnple, you might want to find out the age of something as it stood on some other date. Arguments valuel: A column or expression that evaluates to a number oftype DATE or TIMESTAMP. value2: A column or expression that evaluates to a number of type DATE or TIMESTAMP. Return value A positive or negative number of type INTEGER. Exarnple SELECT FIRST_NAME, LAST_NAME, F_AGEINDAYS(DATE_OF_BIRTH, CURRENT_DATE) AS CURRENT_AGE FROM MEMBERSHIP WHERE DATE OF BIRTH < CURRENT DATE - (5 * 365); Related or similar See also F_AgelnDaysThreshold( ). functions
FREEUDFLIB F_AGEINDAYSTHRESHOLD(VALUE 1, VALUE 2, MINVALUE, USEMIN, MAXVALUE, USEMAX} Win32 Computes the age in days of a date (valuel) with reference to another date (value2) and, instead of returning that value, returns a specified minimum number that is lower than the calculated value, or a specified maximum number that is higher than the calculated value. Arguments valuel: A column or expression that evaluates to a number of type DATE or TIMESTAMP. value2: A column or expression that evaluates to a number of type DATE or TIMESTAMP. It need not be an earlier date than valuel. MinValue: An integer. The value tobe returned ifthe calculated value is lower. Set to 0 ifyou want to use only a MaxValue. UseMin: Set to 1 if you want to use a Min Value. Set UseMax to 0 if you want to use only a Min Value. MaxValue: An integer. The value tobe returned if the calculated value is high er. Set to 0 if you want to use only a Min Value. UseMax: Set to 1 ifyou want to use aMaxValue. Set UseMin to 0 ifyou want to use only a MaxValue. Return value A number of type INTEGER. Notes If the last four arguments are all 0, the function works exactly like F_AgeThreshold. Exarnple This statementwill return a Iist showing all accounts with due dates less than 30 days ago with an overdue age of 29 days and all with due dates more than 90 days ago with an overdue age of90 days. All others will be shown with their actual age. SELECT ACCOUNT_NAME, F_AGEINDAYSTHRESHOLD(DUE_DATE, CURRENT_DATE, 29, 1, 90, 1) AS OVERDUE AGE FROM ACCOUNT; Related or similar See also AgelnDays( ). functions 895 Appendix!
FREEUDFLIB F_AGEINMONTHS(VALUEl, VALUE2) Win32 Computes the age in months of a date (valuel) with reference to another date (value2). Typically, the reference date would be the current date, but it need not be. For example, you might want to find out the age of so mething as it stood on some other date. Arguments valuel: A column or expression that evaluates to a number of type DATE or TIMESTAMP. value2: A column or expression that evaluates to a number oftype DATE or TIMESTAMP. It need not be an earlier date than valuel. Return value A positive or negative number of type INTEGER. Example SELECT ACCOUNT_NAME, F_AGEINMONTHS(DUE_DATE, CURRENT_DATE) AS OVERDUE_AGE FROM ACCOUNT WHERE ACCT BALANCE > 0 AND DUE_DATE < CURRENT_DATE - (6 * 7); Related or similar See also F_AgeinMonthsThreshold(). functions
FREEUDFLIB F_AGEINMONTHSTHRESHOLD(VALUE 1, VALUE 2, MINVALUE, USEMIN, MAXVALUE, USEMAX) Win32 Works for F_AgeinMonths just as F_AgeinDaysThreshold works for F_AgeinDays.
FREEUDFLIB F_AGEINWEEKS(VALUEl, VALUE2) Win32 Computes the age in weeks of a date (valuel) with reference to another date (value2). Typically, the reference date would be the current date, but it need not be. For example, you rnight want to find out the age of something as it stood on some other date. Arguments valuel: A column or expression that evaluates to a number of type DATE or TIMESTAMP. value2: A column or expression that evaluates to a number of type DATE or TIMESTAMP. It need not be an earlier date than valuel. Return value A positive or negative number of type INTEGER. Example SELECT ACCOUNT_NAME, F_AGEINWEEKS(DUE_DATE, CURRENT_DATE) AS OVERDUE_AGE FROM ACCOUNT WHERE ACCT BALANCE > 0 AND DUE_DATE < CURRENT_DATE - (366/2); Related or similar See also F_AgeinWeeksThreshold( ). functions
896 Externat Function Summary
FREEUDFLIB F_AGEINWEEKSTHRESHOLD{VALUE 1, VALUE z, MINVALUE, USEMIN, MAXVALUE, USEMAX) Win32 Works for AgelnWeeks just as F_AgelnDaysThreshold works for F_AgelnDays.
FREEUDFLIB F_CMONTHLONG{VALUE) Win32 Takes a TIMESTAMP or DATEandreturns the name ofthe month (in English) fully spelled out as a mixed-case string. Arguments value is a column or expression that evaluates to a TIMESTAMP or DATE type. Return value 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', or 'December'. Example This statement adds 40 days to today's date and returns the month for that adjusted date as a string: SELECT F_CMONTHLONG(CURRENT_DATE + 40) FROM RDB$DATABASE; Related or similar See also F_CMONTHSHORT( ), SDOW( ), intemal function EXTRACT( ). functions
FREEUDFLIB F_CMONTHSHORT{VALUE) Win32 Takes a TIMESTAMP or DATE and returns a three-character abbreviation ofthe month name (in English) as a mixed-case string.
FREEUDFLIB F_MAXDATE{VALUE1, VALUEZ) Win32 Takes two date or time type values or expressions and retums the later ofthe two as a timestamp(TIMESTAMP in dialect 3; DATE in dialect 1). Arguments valuel: A column or expression that evaluates to a TIMESTAMP or DATE type. value2: A column or expression that evaluates to a TIMESTAMP or DATE type. Return value The later date or date expression, resolved to TIMESTAMP.
897 Appendix/
FREEUDFLIB F_MINDATE(VALUE1, VALUE2) Win32 Takes two date or time type values or expressions and returns the earlier ofthe two as a timestamp. Arguments valuel: A column or expression that evaluates to a TIMESTAMP or DATE type. value2: A column or expression that evaluates to a TIMESTAMP or DATE type. Return value The earlier date or date expression, resolved to TIMESTAMP.
FREEUDFLIB F_QUARTER(VALUE) Win32 Takes a date or time type value or expression and returns the quarter oftheyear. Arguments value is a column or expression that evaluates to a TIMESTAMP or DATE type. Return value Returns 1 for January to March, 2 for April to June, 3 for July to September, 4 for October to December.
FREEUDFLIB F_WOY(VALUE) Win32 Returns astringthat concatenates the year of the date with the integer week of the year. Arguments value is a column or expression that evaluates to a TIMESTAMP or DATE type. Return value Returns an integer representing the digits of the year shifted left two places, followed by two digits representing the week of the year. Example The following example returns 200313: SELECT WOY('26.03.2003') FROM RDB$DATABASE;
String and Character Functions
IB_UDF ASCII_CHAR(VALUE) Linux, Win32 Returns the ASCII character corresponding to the decimal value passedin. Arguments value is a column, constant, or expression of type SMALLINT or INTEGER. Return value A single-byte printable or non-printable character. Example This statementwill insert a carriage return and a line feed into a column on every row of an external table: UPDATE EXT FILE SET EOL= ASCII_CHAR(13) I I ASCII_CHAR(lü);
898 Externat Function Summary
IB_UDF ASCII_VAL(VALUE) Linux, Win32 Returns the ASCII value of the character passed in. Arguments value is a column, constant, or expression of type CHAR. Return value Integer-an ASCII decimal code. Example SELECT ASCII_VAL('&') AS ASC_NUM FROM RDB$DATABASE;
IB_UDF LOWER(VALUE) Linux, Win32 Returns the input string as lowercase characters. It works only with ASCII characters. Arguments value is a column or expression that evaluates to an ASCII string of 32,765 bytes or less. Return value A CHAR(n) orVARCHAR(n) ofthe same size as the input string. Notes This function can receive andreturn up to 32,767 characters, the Iimit for a Firebird character string. Example The following statement will return the string 'come and sit at my table': SELECT LOWER('Come and sit at MY TABLE') AS L_STRING FROM RDB$DATABASE;
IB_UDF LPAD(VALUE, LENGTH, IN_CHAR) Linux, Win32 Prepends the given character in_charto the beginning ofthe input string, value, untillength of the result string becomes equal to the given number, length. Arguments value: A column or expression that evaluates to a string not Ionger than (32767 -length) bytes. length: An integer type or expression. in_char. A single character, to be used as the padding character. Return value A CHAR(n) OR VARCHAR(n), where n is the supplied length argument. Notes This function can return up to 32,765 bytes, the Iimit for a Firebird character string. Example The following statementwill return the string '##########RHUBARB': SELECT LPAD('RHUBARB, 17, '#') AS LPADDED_STRING FROM RDB$DATABASE; Related or similar See also RPAD( ). functions
899 Appendix!
IB_UDF LTRIM{VALUE) Linux, Win32 Removes Ieading spaces from the input string. Arguments value is a coiumn or expression that evaluates to a string not Ionger than 32,767 bytes. Return value A CHAR(n) OR VARCHAR(n) with no Ieading space characters. Notes This function can accept up to 32,765 bytes, including space characters, the Iimit for a Firebird character string. Exampie The following Before Insert trigger fragment will trim any Ieading spaces from the input: NEW.CHARACTER_COLUMN = LTRIM(NEW.CHARACTER_COLUMN); Reiated or similar See also RTRIM( ), F_RTRIM( ), F_LRTRIM( ). functions
FBUDF SRIGHT(VALUE, LENGTH) Linux, Win32 Returns a substring from the supplied value, being the rightrnost length characters in value. Arguments value: A coiumn or expression that evaiuates to a string not Ionger than 32,767 bytes.-TSRlength: An integer type or expression. Return value A CHAR(n) orVARCHAR(n). Notes This function can accept up to 32,765 bytes, the Iimit for a Firebird character string. Example The following statementwill return the string 'fox jumps over the lazy dog.': SELECT SRIGHT('The quick brown fox jumps over the lazy dog. ', 28) AS R_STRING FROM RDB$DATABASE; Reiated or similar See also SUBSTR( ), SUBSTRLEN( ), internal function SUBSTRING( ). functions
IB_UDF RPAD(VALUE, LENGTH, IN_CHAR) Linux, Win32 Appends the given character in_char to the end of the input string, value, until the Iength ofthe result string becomes equal to the given number, length. Arguments value: A coiumn or expression that evaluates to a string not Ionger than (32, 765 -length) bytes. length: An integer type or expression. in_char: A single character, to be used as the padding character. Return value A CHAR(n) orVARCHAR(n), where n is the supplied length argument. Notes This function can return up to 32,765 bytes, the Iimit for a Firebird character string.
900 External Function Summary
IB_UDF RPAD(VALUE, LENGTH, IN_CHAR) (continued) Example The following statementwill return the string 'Framboise***********': SELECT RPAD('Framboise, 20, '*') AS RPADDED_STRING FROM RDB$DATABASE; Related or similar See also LPAD( ). functions
IB_UDF RTRIM(VALUE} Linux, Win32 Removes trailing spaces from the input string. Arguments value is a column or expression that evaluates to astring not langer than 32,765 bytes. Return value A CHAR(n) or VARCHAR(n) with no leading space characters. Not es This function can accept up to 32,765 bytes, including space characters, the limit for a Firebird character string. Example The following Before Inserttriggerfragment will trim any trailing spaces from the input:
NEW.CHARACTER_COLUMN = RTRIM(NEW.CHARACTER_COLUMN); Related or similar See also LTRIM ( ) , F_LRTRIM ( ) . functions
IB_UDF STRLEN(VALUE} Linux, Win32 Returns the length of a string. Arguments value is a column or expression that evaluates to a string not langer than 32,765 bytes. Return value An integer, the length (count) of characters in the string. Notes This function can accept up to 32,765 bytes, including space characters, the limit for a Firebird character string. Example The following PSQL fragment returns the length of a column to a local variable:
DECLARE VARIABLE LEN INTEGER;
SELECT COL1, COL2, COL3 FROM ATABLE INTO :V1, :V2, :V3; LEN = STRLEN(V3); ... , Related or similar See also SUBSTRLEN( ). functions
901 Appendix!
IB_UDF SUBSTR(VALUE, POS1, POS2) Linux, Win32 Returns astring consisting of the characters from posl to pos2 inclusively. If pos2 is past the end of the string, the function will return all characters from posl to the end ofthe string. Arguments value: A column or expression that evaluates to a string. posl: A column or expression that evaluates to an integer type. pos2: A column or expression that evaluates to an integer type. Return value Astring. Not es Ifyou are porting a legacy application written for lnterBase, be aware that this implementation of SUBSTR() differs from that of SUBSTR() in the Borlanddistributions ofthe ib_udflibrary, which returnsNULL when pos2 is past the end of the input string. This function can accept up to 32,765 bytes, including space characters, the Iimit for a Firebird character string. Example The following statement strips the first three characters from the string in COLUMNB and sets its value tobe the string starting at position 4 and ending at position 100. Ifthe string ends before position 100, the result will be all of the characters from position 4 to the end of the string: UPDATE ATABLE SET COLUMNB = SUBSTR(COLUMNB, 4, 100) WHERE ... Related or similar See also SUBSTRLEN( ), RTRIM( ), internal function SUBSTRING( ). functions
IB_UDF SUBSTRLEN{VALUE, STARTPOS, LENGTH) Linux, Win32 Returns a string of size length starting at startpos. The length of the string will be the lesser of length or the number of characters from startpos to the end of the input value. Arguments value: A column or expression that evaluates to a string not Ionger than 32,765 bytes. startpos: An integer constant or expression. length: An integer constant or expression. Return value Astring. Not es This function can accept up to 32,765 bytes, including space characters, the Iimit for a Firebird character string. Example The following statement takes the value of a column and updates it by removing the first three characters and, after that, removing any trailing characters if the remaining string is langer than 20 characters: UPDATE ATABLE SET COLUMNB = SUBSTRLEN(COLUMNB, 4, 20) WHERE ... Related or similar See also SUBSTR( ), RTRIM( ), internal function SUBSTRING( ). functions
902 fu:ternal Function Summary
FREEUDFLIB F_CRLF() Win32 Returns the Windows carriage return/line feed string-ASCII(l3) II ASCII(lO). Arguments None. Return value AC-style (null-terminated) string. Example The following statement inserts a Windows end-of-line marker into a column in a table (e.g., an external table for export to another application): INSERT INTO EXTABLE(COLUMN1, COLUMN2, EOL) VALUES (99, 'An item of data', CRLF());
FREEUDFLIB F_FINDWORD{VALUE, N) Win32 Given a starting position, startpos, return a word consisting ofthe character at that position and succeeding characters up to the next white space character. Arguments value: A column or expression that evaluates to astring type. n: An integer type, indicating the zero-based position in the string where the required word is to be located. Return value Astring. Notes Consider strings passed to f_FindWord as arrays of characters starting atindexO. Example The following statement returns the word "pie": SELECT F_FINDWORD('I never tasted pie like Mom used to make', 15) FROM RDB$DATABASE;
FREEUDFLIB F_LEFT(VALUE, N) Win32 Returns the first num characters from an input string, value. Arguments value: A column or expression that evaluates to astring type. n: An integer type, indicating the number of characters to return from the left side of value. Return value A string of n characters. Example The following statement returns the string "I never tasted pie": SELECT F_LEFT('I never tasted pie like Mom used to make', 18) FROM RDB$DATABASE; Related or similar See also SUBSTRLEN( ), SUBSTR( ), internal function SUBSTRING( ). functions
903 Appendix!
FREEUDFLIB F_LINEWRAP{VALUE, STARTPOS, WIDTH) Win32 Given a starting position (startpos) in astring (value) and a column width (width), returns the portion of value, starting at startpos, that fits in width character spaces. Arguments value: A column or expression that evaluates to astring type. startpos: An integer type, indicating the zero-based position in the string where the return string is to begin. width: An integer type, indicating the width of the column (print/ display) that the returned string must fit into. Return value Astring of width (or fewer) characters. Notes Consider strings passed to f_LineWrap() as arrays of characters starting at index 0. Example The following statement returns the string 'which, taken at the flood': SELECT F_WORDWRAP('There is a tide in the affairs of men which, taken at the flood, leads on to good fortune. ', 38, 25) FROM RDB$DATABA5E;
FREEUDFLIB F_LRTRIM(VALUE) Win32 Trims allleading and trailing white space from a string. Arguments value is a column or expression that evaluates to a string type. Return value A string with no leading or trailing white space characters. Example The following statement returns the string 'lean and mean': SELECT F_LRTRIM(' lean and mean ') FROM RDB$DATABASE; Related or similar See also LTRIM ( ), RTRIM ( ) . functions
FREEUDFLIB F_PROPERCASE(VALUE) Win32 Converts a string to "proper case" or "camel case" -that is, takes each word and replaces the first letter with its uppercase equivalent and replaces each remaining character with its lowercase equivalent. Arguments value is a column or expression that evaluates to a string type. Return value Astring such as 'Now Is The Time For All Good Men To Come To The Aid OfThe Party'. Notes Though convenient for a specific task, this function has limitations. It will not, for example, treat names like d'Oliveira, O'Halloran, or MacDonald correctly. Example The following statement returns the string 'Eric S. Raymond': SELECT F_PROPERCASE('ERIC S. RAYMOND') FROM RDB$DATABASE; Related or similar See also LOWER( ), UPPER( ). functions
904 Externat Function Summary
BLOß Functions
FBUDF STRINGZBLOB(VALUE) Linux, Win32 Takesastring field (column, variable, expression) and returns a text BLOB. Arguments value is a column or expression that evaluates to a VARCHAR type of 300 characters or less. Return value A textBLOB. Not es Under most conditions, it will not be necessary to call this function. Firebird will accept astring directly as input to a BLOB. Example This PSQL fragment concatenates two strings and converts the result to a text BLOB:
DECLARE VARIABLE V_COMMENT1 VARCHAR(250); DECLARE VARIABLE V_COMMENT2 VARCHAR(45); DECLARE VARIABLE V_MEMO VARCHAR(296) = '';
SELECT <•• other fields ... >, COMMENT1, COMMENT2 FROM APPLICATION WHERE APPLICATION --ID = :APP ID INTO <•• other variables .. >, :V_COMMENT1, V_COMMENT2; IF (V_COMMENT1 IS NOT NULL) THEN V_MEMO = V_COMMENT1; IF (V_COMMENT2 IS NOT NULL) THEN BEGIN IF (V_MEMO = '') THEN V_MEMO = V_COMMENT2; ELSE V_MEMO = V_MEMO I I' 'I I V_COMMENT2; END IF (V_MEMO <> '') THEN INSERT INTO MEMBERSHIP ( FIRST_NAME, LAST_NAME, APP_ID, BLOB_MEMO) VALUES ( :FIRST_NAME, :LAST_NAME, :APP_ID, STRING2BLOB(:V_MEMO));
Related or similar See also F_BLOBASPCHAR(). functions
FREEUDFLIB F_BLOBMAXSEGMENTLENGTH(VALUE) Win32 Given a column reference to a BLOB in storage, returns its maximum segment size. Arguments value is the identifier of a BLOB column in a table. Return value An integer representing the size of the largest stored segment in bytes. continued
905 Appendix!
FREEUDFLIB F_BLOBMAXSEGMENTLENGTH(VALUE) (continued) Example SELECT F_BLOBMAXSEGMENTSIZE(BLOB_MEMO) AS MEMO_SEGMENT_SIZE FROM MEMBERSHIP WHERE MEMBER_ID = •••• ; Related or similar See also F_BLOBSEGMENTLENGTH( ), F_BLOBSIZE( ). functions
FREEUDFLIB F_BLOBSEGMENTCOUNT(VALUE} Win32 Given a column reference to a BLOß in storage, returns the number of segments used to store it. Arguments value is the identifier of a BLOß column in a table. Return value An integer representing the number of segments. Example SELECT F_BLOBSEGMENTCOUNT(BLOB_MEMO) AS SEGMENT_COUNT FROM MEMBERSHIP WHERE MEMBER_ID = •••• ; Related or similar See also F_MAXBLOBSEGMENTSIZE(), F_BLOBSIZE(). functions
FREEUDFLIB F_BLOBSIZE{VALUE} Win32 Given a column reference to a BLOß in storage, returns its size in bytes. Arguments value is the identifier of a BLOB column in a table. Return value An integer representing the size oftheBLOB in bytes. Example SELECT F_BLOBSIZE(BLOB_MEMO) AS SIZE_OF_MEMO FROM MEMBERSHIP WHERE MEMBER_ID = •••• ; Related or similar See also F_BLOBSEGMENTCOUNT(), F_BLOBMAXSEGMENTSIZE( ). functions
FREEUDFLIB F_BLOBASPCHAR{VALUE} Win32 Takes a reference to a BLOß field (column or variable) and returns its contents as a null-terminated string. Arguments value is the identifier of a BLOB column or variable. Return value A null-terminated string. Notes Use this function only on BLOBs that you are certain do not exceed the maximum length of a VARCHAR type (32, 765 bytes). Beware of larger byte sizes in BLOBs storing multi-byte characters.
906 External Function Summary
FREEUDFLIB F_BLOBASPCHAR(VALUE) (continued) Example SELECT F_BLOBASPCHAR(BLOB_MEMO) AS MEMO_STRING FROM MEMBERSHIP WHERE MEMBER_ID = •••• ; Related or similar See also STRING2BLOB( ). functions
FREEUDFLIB F_BLOBLEFT(VALUE, N) Win32 Takes a reference to a BLOB field (column or variable) and returns the first n characters. Arguments value: The identifier of a BLOB column or variable. n: The maximum number of characters to return. It must not exceed the maximum length of a VARCHAR type (32, 765 bytes). Return value A null-terminated string n orfewer characters in length. Notes Beware oflarger byte sizes in BLOBs storing multi-byte characters. Example SELECT F_BLOBLEFT(BLOB_MEMO, 20) AS MEMO_START FROM MEMBERSHIP WHERE MEMBER_ID = •••• ; Related or similar See also F_BLOBMID( ), F_BLOBRIGHT( ). functions
FREEUDFLIB F_BLOBLLINE(VALUE, N) Win32 Takes a reference to a BLOß field (column orvariable) and returns the nth line as a string. Arguments value: The identifier of a BLOß column or variable. n: The number of the line in the BLOß, counting the first line as line l. Return value A null-terminated string n orfewer characters in length. Notes Use this function only on BLOBs that are arranged in CRLF-separated strings. Do not use it unless you are certain that lines do not exceed the maximum length of a VARCHAR type (32, 765 bytes). Beware of larger byte sizes in BLOBs storing multi-byte characters. Example SELECT F_BLOBLINE(BLOB_MEMO, 20) AS MEMO_LINE20 FROM MEMBERSHIP WHERE MEMBER_ID = •••• ; Related or similar See also F_BLOBMID(), F_BLOBRIGHT( ). functions
907 Appendix!
FREEUDFLIB F_BLOBMID(VALUE, STARTPOS, N) Win32 Takes a reference to a BLOB field (colurnn or variable) and returns n characters, beginning at startpos. Arguments value: The identifier of a BLOB column or variable. startpos: The position of the first character in the returned string. n: The maximum number of characters to return. It must not exceed the maximum length of a VARCHAR type (32, 765 bytes). Return value A null-terminated string n or fewer characters in length. Notes Beware oflarger byte sizes in BLOBs storing multi-byte characters. Exarnple SELECT F_BLOBMID(BLOB_MEMO, 140, 20) AS MEMO_SUBSTRING FROM MEMBERSHIP WHERE MEMBER_ID = •••• ; Related or similar See also F_BLOBRIGHT( ) , F_BLOBLEFT( ) . functions
FREEUDFLIB F_BLOBRIGHT(VALUE, N) Win32 Takes a reference to a BLOB field (column orvariable) and returns the last n characters. Arguments value: The identifier of a BLOB column or variable. n: The maximum number of characters to return. It must not exceed the maximum length of a VARCHAR type (32, 765 bytes). Return value A null-terminated string n or fewer characters in length. Notes Beware of !arger byte sizes in BLOBs storing multi-byte characters. Exarnple SELECT F_BLOBRIGHT(BLOB_MEMO, 20) AS MEMO_END FROM MEMBERSHIP WHERE MEMBER_ID = •••• ; Related or similar See also F_BLOBMID(), F_BLOBLEFT( ). functions
FREEUDFLIB F_BLOBBINCMP(VALUE1, VALUE2) Win32 Performs a binary"diff" comparison on the contents oftwoBLOB fields (columns or variables) and returns a value indicating whether they are the sarne. Arguments valuel and value2 are the identifiers oftwoBLOB columns or variables that are to be compared. Return value 1 (True) ifthe BLOBs are the same, 0 (False) ifnot.
908 External Function Summary
FREEUDFLIB F_BLOBBINCMP{VALUE1, VALUE2) (continued) Example This snippet from a Before Update trigger sets a flag if the supplied BLOB is not the same as the compared one:
DECLARE VARIABLE CMP_BLOB BLOB SUB_TYPE TEXT;
SELECT BLOB - MEMO FROM REPL - MEMBERSHIP WHERE MEMBER - ID = NEW.MEMBER - ID INTO :CMP_BLOB; IF (F_BLOBBINCMP(NEW.BLOB_MEMO, CMP_BLOB) = 1) THEN NEW.UPDATE MEMO = 'T'; ELSE NEW.UPDATE MEMO= 'F';
Trigonometrie Functions
IB_UDF ACOS{VALUE) Linux, Win32 Calculates the arccosine (inverse of cosine) of a number between -1 and 1. Ifthe number is out ofbounds, it returns NaN. Arguments value is a column or expression that is compatible with a signed or unsigned DOUBLE PRECISION number, evaluating to a valid cosine value. Return value A DOUBLE PRECISION number, in degrees. Example This snippet from a trigger converts a raw cosine value to degrees:
IF (NEW.RAW_VALUE IS NOT NULL) THEN NEW.READINGl = ACOS(NEW.RAW_VALUE); Related or similar See also COS( ), COSH( ), and other trigonometric functions. functions
IB_UDF ASIN{VALUE) Linux or Win32 Returns the arcsine (inverse of sine) of a number between -1 and 1. Returns NaN ifthe number is out ofrange. Arguments value is a column or expression that is compatible with a signed or unsigned DOUBLE PRECISION number, evaluating to a valid sine value. Return value A DOUBLE PRECISION number, in degrees. Example This snippet from a trigger converts a raw sine value to degrees:
IF (NEW.RAW_VALUE IS NOT NULL) THEN NEW.READINGl = ASIN(NEW.RAW_VALUE); Related or similar See also SIN( ), SINH( ), and other trigonometric functions. functions
909 Appendix/
IB_UDF ATAN{VALUE} Linux, Win32 Returns the arctangent (inverse of tangent) of the input value. Arguments value is a column or expression that is compatible with a signed or unsigned DOUBLE PRECISION number that is a valid tan(gent) value. Return value A DOUBLE PRECISION number, in degrees. Example This snippet from a trigger converts a raw tan(gent) value to an arc, in degrees:
IF (NEW.RAW_VALUE IS NOT NULL) THEN NEW.READINGl = ATAN(NEW.RAW_VALUE); Related or similar See also ATAN2 ( ) ,TAN ( ) ,TANH( ) ,and other trigonometric functions. functions
IB_UDF ATAN2{VALUE1, VALUE2} Linux, Win32 Returns a value that is an arc, in degrees, calculated as the arctangent of the result of dividing one tangent by another. Arguments valuel and value2 are both numeric columns or expressions evaluating as DOUBLE PRECISION numbers that arevalid tan(gent) values. Return value A DOUBLE PRECISION number, the result the arctangent of (valuell value2) in degrees. Example This PSQL snippet stores a value that is an arc, in degrees, calculated as the arctangent of the result of dividing one tangent by another:
UPDATE HEAVENLY HAPPENINGS SET INCREASE_RATIO = ATAN2(INITIAL_TAN, FINAL_TAN) WHERE HAPPENING_ID = :happening_id; Related or similar See alsoATAN(), TAN(), TANH(). functions
IB_UDF COS{VALUE} Linux, Win32 Returns the cosine of value. Arguments value is a column or expression that is compatible with a signed or unsigned DOUBLE PRECISION number, evaluating to a value (in degrees) between -263 and 263. Return value A DOUBLE PRECISION number, or 0 if the input is out of range. Not es If value is greater than or equal to 263, or less than or equal to -263, there is a loss of significance in the result of the call, and the function generates a _TLOSS error and returns a 0.
910 External Function Summary
IB_UDF COS{VALUE) (continued) Example This snippet from a trigger calculates and stores the cosine of an angular measurement input in degrees:
IF (NEW.READING1 IS NOT NULL) THEN NEW.RDG_COSINE = COS(NEW.READING1); Related or similar See also SIN( ), COS(), ACOS( ), COSH( ). functions
IB_UDF COSH{VALUE) Linux, Win32 Returns the hyperbolic cosine of value. Arguments value is a column or expression that is compatible with a signed or unsigned DOUBLE PRECISION number, evaluating to a value (in degrees) between -263 and 263. Return value A DOUBLE PRECISION number, or 0 if the input is out of range. Notes If value is greater than or equal to 263, or less than or equal to -263, there is a loss of significance in the result of the call, and the function generates a _TLOSS error and returns a 0. Example This snippet from a trigger calculates and stores the hyperbolic cosine of an angular measurement input in degrees:
IF (NEW.READING1 IS NOT NULL) THEN NEW.RDG_COS_HYP = COSH(NEW.READING1); Related or similar See also SINH( ), TANH( ), and other trigonometric functions. functions
IB_UDF COT{VALUE) Arguments value is a column or expression that is compatible with a signed or unsigned DOUBLE PRECISION number, evaluating to a value (in degrees) between -263 and 263. Return value A DOUBLE PRECISION number, or 0 if the input is out of range. Notes If value is greater than or equal to 263, or less than or equal to -263, there is a loss of significance in the result of the call, and the function generates a _TLOSS error and returns a 0 ("a quiet NaN"). Example This snippet from a trigger calculates and stores the cotangent of an angular measurement input in degrees:
IF (NEW.READING1 IS NOT NULL) THEN NEW.RDG_COTAN = COT(NEW.READING1); Related or similar See also TAN ( ), ATAN ( ), TANH ( ) . functions
911 Appendix/
IB_UDF SIN(VALUE) Linux, Win32 Returns the sine of value. Arguments value is a column or expression that is compatible with a signed or unsigned DOUBLE PRECISION number, evaluating to a value (in degrees) between -263 and 263. Return value A DOUBLE PRECISION number, or 0 if the input is out of range. Notes If value is greater than or equal to 263, or less than or equal to -263, there is a loss of significance in the result of the call, and the function generates a _TLOSS error and returns a 0. Example This snippet from a trigger calculates and stores the sine of an angular measurement input in degrees:
IF (NEW.READINGl IS NOT NULL) THEN NEW.RDG_SINE = SIN(NEW.READINGl); Related or similar See also COS( ), ASIN( ), SINH( ). functions
IB_UDF SINH(VALUE) Linux, Win32 Returns the hyperbolic sine of value. Arguments value is a column or expression that is compatible with a signed or unsigned DOUBLE PRECISION number, evaluating to a value (in degrees) between -263 and 263. Return value A DOUBLE PRECISION number, or 0 if tbe input is out of range. Notes If value is greater than or equal to 263, or less than or equal to -263, there is a loss of significance in the result of the call, and the function generates a _TLOSS error and returns a 0. Example This snippet from a trigger calculates and stores the hyperbolic sine of an angular measurement input in degrees:
IF (NEW.READINGl IS NOT NULL) THEN NEW.RDG_SIN_HYP = SINH(NEW.READINGl); Related or similar See also SIN( ), TANH( ), COSH( ). functions
IB_UDF TAN{VALUE) Linux, Win32 Returns the tangent of value. Arguments value is a column or expression tbat is compatible witb a signed or unsigned DOUBLE PRECISION number, evaluating to a value (in degrees) between -263 and 263. Return value A DOUBLE PRECISION number, or 0 if the input is out of range. Notes If value is greater than or equal to 263, or less than or equal to -263, there is a loss of significance in the result of the call, and the function generates a _TLOSS error and returns a 0 ("quiet NaN").
912 Extemal Function Summary
IB_UDF TAN(VALUE} (continued) Example This snippet from a trigger calculates and stores the tangent of an angular measurement input in degrees:
IF (NEW.READINGl IS NOT NULL) THEN NEW.RDG_TAN = TAN(NEW.READINGl); Related or similar See also COT( ), ATAN( ), TANH( ). functions
IB_UDF TANH(VALUE} Iinux, Win32 Returns the hyperbolic tangent of value. Arguments value is a column or expression that is compatible with a signed or unsigned DOUBLE PRECISION number, evaluating to a value (in degrees) between -263 and 263. Return value A DOUBLE PRECISION number, or 0 if the input is out of range. Notes If value is greater than or equal to 263, or less than or equal to -263, there is a loss of significance in the result of the call, and the function generates a _TLOSS error and returns a 0. Example This snippet from a trigger calculates and stores the hyperbolic tangent of an angular measurement input in degrees:
IF (NEW.READINGl IS NOT NULL) THEN NEW.RDG_TAN_HYP = TANH(NEW.READINGl); Related or similar See alsoTAN( ), ATAN( ). functions
Data Formatting Routines
FREEUDFLIB F_DOLLARVAL(VALUE) Win32 Formats a floating-point number value into astring with a currency format, for example, "99,999,999.99", suitable for concatenating to currency symbols and other embellishments. Arguments value is a column or expression that evaluates to a number of type DOUBLE PRECISION or FLOAT. Return value A string of variable length. Not es Care will be needed with the likely precision of the input number, especially if it is to be derived from an expression. Wrong results can be expected ifthe result is passed to a CHAR orVARCHAR that is to small to accommodate it. continued
913 Appendix!
FREEUDFLIB F_DOLLARVAL{VALUE} (continued) Example SELECT '$' I I F DOLLARVAL(CAST(SUM(PURCHASE AMT) AS DOUBLE PRECISION)) I I ,-USO' - AS TOTAL SPEND FROM MEMBER ACCOUNT WHERE MEMBER_ID = 440099; Related or similar See also F_FixedPoint( ). functions
FREEUDFLIB F_FIXEDPOINT{VALUE1, VALUE2} Win32 Formats the passed value as a flxed-point string with DecimalPlaces number decimal places. Arguments valuel: A column or expression that evaluates to a number of a floating-point type: the number tobe transformed. value2: A constant or expression that evaluates to an integer type: the number of decimal places to show in the output. Return value A string of variable length. Notes Care will be needed with the likely precision of the input number, especially if it is tobe derived from an expression. Wrang results can be expected if the result is passed to a CHAR or VARCHAR that is to small to accommodate it. Example SELECT 'TOTAL YARDAGE: ' I I F_FIXEDPOINT(SUM(YARDAGE), 3) I I ' yds' AS TOTAL_YARDAGE FROM PIECE GOODS WHERE PRODUCT_ID = 100; Related or similar See also F_DollarValue( ). functions
FREEUDFLIB F_GENERATESNDXINDEX{VALUE} Win32 Given astring value, compute its soundex value. Arguments value is a column or expression that evaluates to a character type: a name for which a Soundex is to be generated. Return value A six -character Soundex index. Not es A simple Soundex algorithm is used to compute the Soundex index• it generates an algorithmic code that simplifles what the name "sounds like." You do not need to understand the algorithm to implement Soundex indexing. Example The following Before Insert trigger snippet demonstrates how this function might be used to store a Soundex automatically as a search column in a membership register:
IF (NEW.LAST_NAME IS NOT NULL) THEN NEW.SOUNDEX_NAME = F_SNDXINDEX(NEW.LAST_NAME)
914 APPENDIX II Solving Network Problems
WHEN YOU HAVE PROBLEMS CONNECTING a dient to the Server, this collection of tests may help you to isolate the cause. If all eise fails, never overlook the benefits of checking that network cables are actually plugged in and contacts are clean!
Checklist The following checklist suggests some "basics" you can try.
Can You Connect to a Database at All? Ifyou are running Superserver on Windows or Classic server on POSIX, test whether you can make a local connection. (Superserver on POSIX and Classic server on Windows do not support local connections.)
1. Log into the console of the database server host, and run an application such as command-line isql or a Windows GUI management tool such as IB_SQL or IBAccess.
2. Attempt to connect to a database without specifying a host name-list just thepath.
POSIX (all in one command):
./isq1 /opt/firebird/examp1es/employee.fdb -user SYSDBA -password yourpwd
Windows (all in one command):
isql 'c:\Program Files\Firebird\Firebird_l_S\examples\employee.fdb' -user SYSDBA -password yourpwd
If it works, then the server is running and the database path is good. Otherwise, check passwords, and checkthat your application is actually finding the correct ver• sion of the dient library.
915 Appendix li
Can You Connect to a Database on Local Loopback? For any server version (other than Windows Embedded Server), you can simulate a dient connecting to the server through the remote dient interface by connecting in TCP/IP localloopback mode. This is actually the recommended mode for alllocal con• nections to full servers. IfTCP /IP services are configured and running on the system, this should work, even if there is no network card installed. First, open the hosts file in a text editor and make sure there is an entry like this:
127.0.0.1 localhost # local loopback server
• On Windows, this file should be in the \ drivers \ etc directory beneath the %system% directory. On Windows 95/98, it is probably in the Windows directory itself.
• On POSIX, it should be in the I etc directory.
If the entry is missing, add it, save it, and dose the file.
l. Log into the console of the database server host, and run an application such as command-line isql or a Windows GUI management tool such as IB_SQL or IBAccess.
2. Attempt to connect to a database without specifying a host name-list just thepath.
POS IX:
./isql localhost:/opt/firebird/examples/employee.fdb -user SYSDBA -password yourpwd
Windows (all in one command):
isql 'localhost:c:\Program Files\Firebird\Firebird_1_5\examples\employee.fdb' -user SYSDBA -password yourpwd
If it works, then the server is running, TCP /IP is working, and the database path is good.
NOTE POSIX systems do not use drive designators, but all server, path, and file names are case sensitive.
916 Solving Network Problems
If local or localloopback connection fails and you are sure that the database name is spelled correctly, then something is wrang with the configuration of the server or the network. Read back through the chapters on server and network configuration and double-check your settings.
Is the Server Listening on the Firebird Port?
The gds_db service (port 3050) will not answer if the server process has not been started. See Table II -1 for instructions on starting the server.
Table II-1. Starting the Server OS INSTRUCTIONS Superserver
POS IX In a command shell, cd to tbe Firebird /bin directory and enter tbe command ibmgr -start. Windows: service Use the Firebird Manager Control Panel applet and dick Start or, at tbe command line, enter the command NET START FirebirdGuardianDefaultlnstance. For v.l.O.x, enter tbe command NET START FirebirdGuardian. You may also try to start tbe service from tbe Services applet. Windows: application Start the Firebird Guardian or Firebird Server from tbe Start menu.
Glassie Server
POS IX There is nothing to do. If tbe xinet daemon (or inet, on old systems) is running, it should start an instance of fb_inet_server (ib_inet_server for v.l.O.x) for you when you attempt to connect. Windows: service Go to a command window and type NET START FirebirdServerDefaultlnstance. You may also try to start tbe service from tbe Services applet. Windows: application Start tbe Firebird Server from tbe Start menu. Note: Do not try to start Classic server from a Control Panel applet or by attempting to start tbe Guardian application.
Are You Getting Errors, Even Though the Service Is Running? If the dient reaches the server host and the gds_db service answers but still cannot attach to a database, you might see a "connection rejected" error. Passihle causes to test are described in the following sections.
917 Appendixll
Is the Database on a Physically Local Drive? A database file must not reside on an NFS filesystem, a mapped drive, or a share. When the ibserver process finds such a case, it denies the connection. To correct this situation, move your database to a fiJ.esystem on a hard disk that is physically local to the database server and correct your connection string to reflect this.
Are the User Name and Passward Valid? The dient application must use a user name and password combination that matches an entry in the security database on the server. This database must be located the Firebird installation root and it must be writable by the server process. Usernamesand passwords apply to the server, not to any specific database. Ifyou transported the database from another server and there are roles and/ or SQL privileges set up in it, you must set up the required users on the new server.
Does the Owner of the Server Process Have Sufficient Permissions to Open Files? Filesystem permissions, induding execute rights on directories, may be an issue on a POS IX platform. Directory permissions may be an issue on Windows NTFS partitions. The server process may need more permissions to create fiJ.es (e.g., firebird.log or interbase.log) in the Firebird root directory. Trying to access databases in areas of the filesystem that are not configured for database access may be an issue in Firebird 1.5 and later-see the firebird.conf param• eter DatabaseAccess.
NOTE Ifyou make a change to firebird.conf (v.l.S +) or ibconfig/isc_config (v.l.O.x), you will need to stop and restart the server to have the changestake effect.
Can the Client Find the Host? The error message "Unable to complete network request to host" appears when the Firebird dient cannot establish a network connection to the server host. Some of the common causes are as follows:
The dient cannot find the host in your network. The server you specify must be running on the network that you use. If the host name corresponds to a host that is inaccessible because of network interruption, or the host is not running, then the connection request cannot succeed. Old drivers and/or dient llbraries are being used. You must use drivers (ODBC,
918 Solving Network Problems
BDE, etc.) that are certified to work with your version of the Firebird server. For exarnple, the SQL Explorer that ships with some Borland products probably won't work with Firebird because the BDE that it uses is too old. The application is findlog the wrong client library. All but the most recent builds of admin tools probably try to Ioad libgds.so (POSIX dients) or gds32.dll (Windows dients) from the default system path. The Firebird 1.5 dient is narned libfbdient.so or fbdient.dll, and it is not located in the system path by default. Study the latest notes in the Firebird I doc directory and/ or the root directory to find solutions. An IP address is used in place of a server narne. If you supplied an IP address instead of a hast narne (server name), the TCP/IP driver may be unable to resolve it or it may time out while trying to do so. This is usually a problern on Wmdows 95 and earlier versions of NT 4. See the previous notes about setting up an entry in the hosts file and apply it to all dient machines. The host's IP address is unstable. Systems that use dynarnic IP addressing can cause the host's IP address to change without warning. Similar problems can occur if the host machine has more than one network interface card. Make hosts file eritries on both the server and dient machines to bind a server narne to an IP address. Firebird 1.5 also provides the configuration option RemoteBind.Address to ensure that incoming connections can find the right channel to the Firebird Server. There isabad or missing gds_db entry in the Services me. Firebird dients will Iook for the gds_db service by default at port 3050. Ifyou reconfigured either the service symbol or the port number in the services flle, you may have induded insufficient information in the connection string for the linkage to be completed. Refer back to the section "Configuring the TCP /IP Port Service" in Chapter 2 if this could be an issue with your setup.
NOTE Problems with the port service are also likely if you have an InterBase server, or another Firebird server, running on the sarne host machine. Although it is possible to do this with v.l.5, it takes careful configuration and cannot be done straight out of the box.
The indicated network protocol is not available. The syntax of the Firebird con• nect string determines the network protocol the dient uses to connect to the server host. Ifyour server does not support the protocol indicated by your con• nect string, the connection attempt falls with the network error. For exarnple, a Windows narned pipes (NetBEUI) connection string will not work if the server is running on Windows 95/98, ME, or XP, nor if the server is running on Linux or another POSIX platform. Only TCP /IP will work with these platforms.
919 Appendix!!
NOTE The Firebird dient library does not support the IPX/SPX network proto• col. Connection will fail ifyou attempt to use IPX/SPX by specifying the database connect string in the form server@volume:/path/database.fdb.
You are trying to connect to a share. It is not possible to connect to a database by way of a Windows, NFS, or SMB (Samba) shared device. The path must be an absolute native fJJ.esystem path as seen o~ the host.
The path string is inconsistent with an existing connection. A Firebird Superserver will block connection if the path string submitted is inconsistent with that used by an existing connection. Firebird added this mechanism to protect databases from a long-standing bug in the antecedent InterBase code, which is known to cause severe corruption to Windows-served databases.
CAUTION Classic servers do not provide this protection. If you are using Classic server on Windows, make certain that different clients always connect using the exactly the same path string in their connection strings. The inconsistency arises because Windows will accept a drive designator without a following backslash, namely C:Databases \mydb.fdb instead of C: \Databases \mydb.fdb. It is not an issue on POSIX, which does not have the potential for this inconsistency.
Do You Need to Disahle Automatie Internet Dialup on Windows? Microsoft Windows operating systems provide by default a networking feature that is convenient for users who use a modern to connect to the Internet-anyTCP/IP request that occurs on the system activates an automatic modern dialing prograrn. It can be a problern on dient systems that use TCP IIP to access a Firebird server on a local net• work. As soon as the dient requests the TCP /IP service, the Windows automatic modern dialer fires up, interfering with network Connections from dient to server. There are several ways to suppress the automatic modern dial feature. No more than one of these methods should be necessary to configure your system to work as you need it to.
Reorder Network Adapter Bindings
You probably have a dialup adapter and an Ethernet adapter for your local network. On Windows NT and Windows 98, you can reverse the bindings order of the two adapters to force the Ethernetadapter to service the TCP /IP request before the dialup adaptertries.
920 Solving Network Problems
Access the Control Panelfrom the Start menu and choose Networking >- Bindings >- All Adapters >- Move Down to move the Ethernet adapter to the top of the list of bindings. The local Ethernet adapter satisfies any local TCP /IP requests and passes on any remaining requests-such as Internet requests-to the next adapter in the list, the dialup adapter.
Use Internet Explorer Configuration Ifyou have Microsoft Internet Explorer installed, you have an applet on the Control Panel that allows you to disable the autodial feature ofthe dialup network driver. Get to the Control Panelfrom the Startmenu and choose Internet Options >- Connections. There, you will find a series of check boxes giving autodial options. Actual wording varies from one Windows version to another. On Windows 2000, for example, you should select "Never dial a connection."
Disahle Autodial in the Registry To disable autodial, start the Registry editor (regedit.exe or regedt2.exe) and select thekey
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
Find EnableAutoDial in the right panel and select Modify. Change its data value from 1 to 0.
Disahle RAS AutoDial On a services-capable Windows platform you can disable the RAS AutoDial service. To do so, start the Services Control Panel applet. On NT 4, it appears directly on the Control Panel. In later versions, the applet can be accessed through Administrative Tools, or its equivalent. Scroll down to Remote Access Auto Connection Manager (or Remote Access Dialup Manager on NT 4) and select it. Change the Startup option to Manual. To stop the service right away, dick Stop. To re-enable it, dick Start.
Are You Still Stuck? If you have a really sticky network prob lern, chances are that others have experienced something similar, too. The firebird-support list is a great place to go for solutions to those really elusive network problems. Refer to Appendix XII for subscribing details.
921 APPENDIX III Application Interfaces
THE "NATIVE" INTERFACE TO FIREBIRD TO the dient library is through the C functions and parameter structures exposed by the API. The C header file ibase.h is distributed with Firebird, in the /indude directory. This header file can be used when writing C pro• grams that use the dient library, but it is also a useful reference when developing interfaces to the library from other languages.
The JayBird JDBC Drivers The JayBird JDBC drivers for Firebird are a fully JDBC 2.0-compliant abstraction of the Firebird API that can be used in virtually any IDE that supports JDBC drivers; for exam• ple, Edipse and Borland JBuilder. The drivers run in Java 2 JRE 1.3.1 and Java 2 JRE 1.4.x, and can be used with all of the popular interface layers supporting JDBC 2.0, the JDBC 2.0 Standard Extensions, and JCA 1.0. Examples indude JBoss 3.2.3, WebLogic 7.0, WebLogic 8.1, ColdFusion MX, Hibernate (transparent persistence layer), and TJDO. The latest version, JayBird 1.5, was due for release in spring 2004. Support for Firebird's two-phase commit accords with the standard contract for participating in distributed transactions in Java, supporting the JCA framework and XADataSource implementations. JayBird accords with the JDBC "one-transaction-per• connection" model. It does not surface multiple transactions per connection, although they are utilized invisibly within the JCA framework. JDBC does not support Firebird events or arrays.
Licensing: JayBird is open source, distributed free of charge under a modified BSD license. Download: In your browser, go to http: I I sourceforge. netlprojectslfirebirdl and scroll down the page to find the row containingfirebird-jca-jdbc-driver. Click the Download link at the right to go to the download page, where you can select the kit you want from the list under firebird-jca-jdbc-driver-for example, FirebirdSQL-l.x.zip. Support: The developer and user support forum is at http: I lgroups.yahoo.coml group/firebird-java. A large, actively maintained FAQ is distributed with the JayBird installations and is available at several community websites, induding http:llwww.ibphoenix.comlmain.nfs?a=ibphoenix&l=;FAQS;NAME='JayBird'.
923 Appendix III
ODBC
Firebird ODBCIJDBC Driver
This is a free, open source JDBC-compliant ODBC driver for Firebird and InterBase 6.x, sponsored originally by IBPhoenix and community donations and released free (in all senses) under the Initial Developer's Public License. Versions ofthe driver libraries are available forWindows, Linux (unixODBC and iODBC), FreeBSD, and Solaris. The latest version when this book went to press (vl.2.0060) complies with ODBC 3.0 specifica• tions. It supports all versions and models of Firebird, including the v.l.S Embedded Server for Windows. Applications can be written to attach to Firebird databases optionally through a vari• ety of DSN descriptors, each irnplementing a different client version. Attachments can be concurrent within a single application, if required. A two-phase commit transaction can support up to ten connections. Support for multiple transactions per connection was in development at the time this book went to press. Firebird events are not supported. Makefiles are distributed for building the driver from C sources in gcc 2.96 Linux and later, gcc freeBSD, gcc forWindows (MinGW), cc Solaris, BCCSS, and MsVC6. IDE projects with makefiles are available for DEV-C++ 4.8 and later and MsVC7. The Firebird ODBC driver-said tobe the fastest available for Firebird and InterBase-works well with Open Office 1.1.0, Microsoft (Excel, VC6, VC7, VB6, VFP6, MsQry32, Access, etc.), and any components supporting ADO. It supports encrypted passwords and scrollable cursors. Interface schemas include
• Universal components (Excel, VFP6, VB6, etc.), including support for Array columns, selectable and executable stored procedures with replaceable param• eters (CALL MYPROC ?), {fn} capability, batches, and fully qualified column identifiers.
• ADO ~ OLEDB ~ ODBC Manager (odbc32.dll) ~ OdbcJdbc
• OLEDB(MSDADC.DLL) ~ ODBC Manager~ OdbcJdbc
• User program interfacing with ODBC Manager~ OdbcJdbc
The driver has AutoQuotedidentifier support for full query compatibility with Microsoft query interfaces.
Download shared libraries: http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_6o_odbc Latest builds: http://cvs.sourceforge.net/viewcvs.py/firebird/OdbcJdbc/Builds/ Latest snapshots: http://www. praktik. km. ua (Vladimir Tsvigun) Support and development forum: Join the Iist at https://lists.sourceforge.net/lists/listinfo/firebird-odbc-devel
924 Application Interfaces
Other ODBC Drivers
XTG ODBC Driver
This is a free, open source Firebird/InterBase 6.x ODBC driver for Windows, conform• ing to the ODBC 3 API CORE Ievel and distributed under LGPL licensing. Version 1.0.0 (beta 15) may contain some bugs but is usable. The binary is distributedas a full Windows installer.
Download binary: http: I lwww. xtgsystems. com Source: http:llofbodbc.sourceforge.netldrvinfo.html
Gemini ODBC Driver This is a commercial ODBC driver for Windows and Linux, conforming to the Call Level Interface (CLI) specification designed by SQL Access Group and then adopted by X/Open and ISO/IEC as an appendix to the current SQL language standard. Currently in version 2.2 beta, the driver conforms to the ODBC specification described in the ODBC Programmer's Reference, version 3.51. You can find more information and a free trial download at http: I lwww. ibdatabase. com.
Easysoft ODBC Driver
This is a commercial InterBase ODBC driver for Windows and Linux. It supports UNICODE on some platforms. More information, a trial download, and a support forum subscription can be found at http: I lwww. easysoft. comlproductslinterbase.
The Firebird .NET Provider The open source Firebird .NET Provider is a data interface layer designed to work with applications developed in Microsoft .NET environments. The latest stable version (v.l.5.2) supports all versions ofFirebird, both Classic server and Superserver for devel• opment in IDEs such as
• Microsoft Visual Studio 2002 and 2003
• SharpDevelop (http: I lwww. icsharpcode. net!OpenSourceiSD)
• Borland C#Builder
• Borland Deiphi .NET (Delphi 8)
• MonoDevelop (http: I lwww. monodevelop. com, in testing)
925 Appendix III
V.1.2, at the beta 2 stage when this book went to press, likely to be released in the summer of 2004, supports the Firebird 1.5 Embedded Server for Windows and Firebird events. By design-a Iimitation of the ADO.NET architecture-the Provider does not supportmultiple transactions per connection or two-phase commit. Language support indudes C#, VB .NET, Microsoft Visual C++ .NET, Deiphi .NET, and ASP.NET or any .NET language. It is known to be compatible with many other specialized .NET products, induding Gentle.NET (http: I lwww. mertner. comlprojectsl gentle), NHibernate (http: I lnhibernate. sourceforge. net), and aspxDelphi.net PORTAL & STORE (http: I lwww. aspxdelphi. net). Firebird supportis being added to the next ver• sion of the object-relational mapper framework LLBLGen Pro (http: I lwww .llblgen. coml defaul tgeneric. aspx). Supported platforms are Microsoft .NET 1.0 and 1.1 (Windows only) and mono (http: I lwww.go-mono. com), tested so far on Windows and Linux. Plansare for the Firebird .NET Provider to follow the course of mono as it becomes available for other platforms (Solaris, FreeBSD, HP-UX, and Mac OS X).
Downloads: Links to downloads and documentation are at http:llwww.ibphoenix.comlmain.nfs?a=ibphoenix&page=ibp_download_dotnet. Development and user support forum: Join at http:lllists.sourceforge.netllistsllistinfolfirebird-net-provider. List archives are available to list subscribers at http:llsourceforge.netlmailarchivelforum.php?forum=firebird-net-provider.
IBPP for C++ Development This is a free, open source C++ dient interface dass library for Firebird Serverversions 1.0, 1.5, and beyond that is free of any tool-specific dependencies. It is designed to enable Firebird access from any C++ application, whether developed as non-visual (CORBA/COM objects, other libraries of dasses and functions, procedural "legacy" code) or in visual or RAD environments. IBPP provides a pure DSQL interface to Firebird through easy-to-use C++ dasses for database administration and data manipulation. The latest version at the time this book went to press was v.2.3, supporting all Firebird versions and dient/server models (Superserver, Classic server, Embedded Server) with full support for multiple transactions, cross-database transactions, and Firebird events. IBPP supports only pure, standard C++ code. The dass library is distributed as source code that builds out of the box in the following compilers:
• Windows: Borland C++Builder 6, Borland free command-line compiler, MSVC 6, MSVC 7, Digital Mars C++, MingW, and CygWin.
• POSIX: gcc 3.2 or higher.
• BCCP should compile successfully on many other configurations, with a little tweaking, mostly in makefiles, to take issues such as "endianness" into account.
926 Application Interfaces
Licensing: Mozilla 1.1, derivative. Downloads and support details: http: I lwww. ibpp. org. Support forum: Subscribe to http: I 11ists. sourceforge. net!lists!listinfol ibpp-discuss.
Delphi, Kylix, and Borland C++Builder
IB Objects This product encompasses two long-established systems of components for Firebird and InterBase that allow developers using the Borland IDE tools on Windows and Linux (Delphi, Kylix, and C++Builder) to exploit all ofFirebird's features. One system is compatible with Borland's TDataset libraries and other third-party components that depend on the TDataset architecture. The other, known as "native IBO," is based on an original dass hierarchy that has no dependency on TDataset architecture. The current version is 4.3Xx, where the "Xx's" represent sub-releases and patch releases. It supports all Pascalversions of Deiphi from v.3, all Kylix versions and C++Builder 3 and higher, and all versions and dient/server models ofFirebird. The TDataset-compatible components are designed to emulate Borland's VCL data access components to the degree that a search-and-replace tool is sufficient to convert obsolete BDE application code directly to a working version under IBO in a few minutes. The native IBO system indudes its own datasource dass and a range of "data• driven'' data-aware controls. Unlike the TDataset-based components, native IBO can be used with low-end editions of the Borland tools. Several reporting tools provide support for the native components. Both systems fully supportlive queries, multiple concurrent transactions and cross-database transactions within an application, Firebird events, unidirectional and scrollable cursors, and callbacks. The native system-which is compatible in the non• visuallayer with the TDataset system-supports immediate execution, caching ofDML events across application boundaries, and extra operational modes, induding incre• mental search.
Support: Community oriented, with a support list, online FAQ querying a Firebird back-end database, community code repository, community update site for subscribers, and a large library of downloadable documentation. Join the list at http: I lgroups. yahoo. comlcommunitylibobjects. The website is http: I lwww. ibobjects. com; the subscribers' site is http:llcommunity.ibobjects.com. Licensing: Trustware-full source (not open source) comes with commercial subscriptions or non-commercial free licensing to charities, open source projects, and students.
927 Appendix III
Evaluation: Fully functioning IB Objects with partial source, for unlimited trial, with nag screen in executables run outside the IDE, is always kept up to date. It can be downloaded from http: I lwww. ibobj ects. com.
FIBPlus Another mature set of components for Delphi, Kylix, and C++Builder, FIBPlus was developed using FreeiBComponents as its basis, originally a set of freeware data access components. FIBPlus has now evolved into a fully commercial product, claiming maxi• mum simplicity and flexibility of use. Based on the Borland TDataset architecture, FIBPlus offers full compatibility with many commercial and open source controls. It offers an easy conversion route from the Borland InterBaseXpress components. The latest version of FIBPlus is v.5.3. Trialversions are available for all supported IDEs: Deiphi 5-7, C++Builder 5-6, and Kylix 3. Older FIBPlus versions arestill available on request for lower versions of the Borland products. FIBPlus supports all versions and client/server models ofFirebird. It is compatible with all third-party tools and components that depend on the TDataset architectures. Some products provide custom FIBPlus support.
Support: The company runs both English and Russian newsgroups for user sup• port and also has a "trouble ticket" system for one-on-one help. The newsgroup addresses are
• English language: news: I /news-devrace. com/fibplus. en
• Russian language: news: I lnews-devrace. com/fibplus. ru
Website: http: I lwww. devrace. com, for product details and trouble tickets. Licensing: Not specified.
Others Several other suites of components are available for interfacing with Firebird.
UIB Components This is a set of open source, lightweight data access components and DBXpress drivers for Firebird, InterBase, and Yaffil.l It's free, under the Mozilla Public License. These components work not just with the Borland tools (Delphi, Kylix, C++Builder), but also with the open source Pascal development environments Lazarus and FreePascal.
1. Yaffil was a proprietary fork of Firebird for Windows. It was made open source near the end of 2003 and is being merged into the Firebird 2 codebase.
928 Application Interfaces
Piatforms are Windows, Linux, and FreeBSD. Binaries and source can be found at http:llwww.progdigy.comiUIB.
Firebird DBXpress Drivers Upscene Productions (http: I lwww. upscene. com) produces Iow-cost DBXpress drivers for use with Deiphi, Kyiix, and C++Builder. Part of the proceeds of sales of these drivers goes toward fund-raising for Firebird Project deveioper grants.
Zeos Components These are open source components for deveiopment and administration of database applications, including Firebird.
• Zeos Database Objects: Library of Deiphi components for quick access to Firebird (and other RDBMSs).
• Zeos Controis: Deiphi visual components library for use with Zeos Database Objects.
• Zeos Ciass Library: Library of classes for deveioping C++ appiications on POSIX piatforms. 1t includes interactive GUI utilities for querying, administration, and working with BLOBs.
Licensing is GPL, version currently 6.1.3. For more information, see http:llzeoslib.sourceforge.net. There are many more component packages availabie. See the listings at http: I lwww. ibphoenix. comlmain. nfs ?a=ibphoenix&page=ibp_dev_comps and also search Googie.
Inter8oseXpress InterBaseXpress (IBX) comprises open source connectivity and service components that are distributed by Borland with some of their Deiphi, Kylix, and C++Buiider products. Bug-fixed versions are avaiiabie from the Code Central repository at http: I lcommunity .borland. com. Do not use the versions that shipped with Deiphi 5 and 6 and Kyiix 2-they were very buggy beta versions that were capabie of causing various kinds of data corruption. Later open source versions are free and can be used with Firebird l.O.x. Some users have encountered probiems using the database con• nectivity components with Firebird 1.5. IBX is not an ideal choice to use with Firebird in the Iong term because its deveioper has indicated that he will not include adapta• tions to recognize differences as Firebird and InterBase diverge.
929 Appendix III
IBOAdmin
This is a set of wrapper components for the Firebird Services API (backup, statistics, security, etc.) based on the code originally distributed as the IBX Service compo• nents. It is open source and requires IB Objects. IBOAdmin is available free from http:llwww.mengoni.it.
PHP
PHP has proved to be a very satisfying platform for developing web front -ends to Firebird databases, using the php-interbase extensions. PHP is currently stable at version 4.3.6 with PHP 5.0-a major rewrite-at a late beta stage. PHP 5.0 has added a number of new Firebird-compatible functions. Search on "ibase" at http: I lwww. php. netl Change log-5. php#S. o. ORCl and subsequent update pages. PHP (http: I lwww. php. net) and Apache Web Server (http: I lhttpd. apache. org) are an inseparable pair for developing Firebird applications for the Web. Platforms are Windows (CGI, ISAPI) and Linux (CGI). Firebird PHPWindows aficionados recommend using the CGI version on Windows Server 2003 and the ISAPI version on Windows 2000, for performance. The php-interbase extensions run fine with all versions ofFirebird on bothApache 1 and 2, with one implementation issue. PHP does not handle 64-bit integers (BIGINT type) natively, so you needs to convert BIGINT values to strings. It is probably not going to be addressed in PHP 5, either. A new function to fetch a Firebird generator value, ibase_gen_id(), returns an integer. Like other generic data access interfaces, PHP appears to favor the one transaction/ one connection model. However, it does support multiple transactions. PHP takes care of committing incomplete transactions. Firebird two-phase comrnit and events are coming in PHP 5. On Windows, the php-interbase extensions are activated in the PHP.ini file after installation. On Linux, the extensions must be built from sources in order to run. Many API functions are accessible, including user management. Lutz Bruckner built an admin interface (see http: I libwebadmin. sf. net), which suggests a full com• plement of access is possible. Several abstraction layers are available for plugging pages into Firebird, including the ADODB classes (http: I lfreshmeat. netlprojects/adodb) and the more compact ezSQL (http: I lphp. justinvincent. com). PEAR-DB isanother abstraction layer, which forms part of the PHP project. A wide choice of PHP editors is available, too. See http:/lwww.php-editors.comlreview.
IDE: Eclipse (http: I lwww. eclipse. org), with phpEclipse (http: I lwww. phpeclipse. deltiki -view_ articles. php), provides debugging and a nice range of editing tools. Eclipse runs on both Linux and Windows, and includes a built-in CVS dient, support for documentation, and plug-in capability (http: I lwww. eclipse-plugins. infoleclipselplugins. jsp). Eclipse 3 is due out in summer 2004.
930 Application Interfaces
Support: Firebird PHP developers run a small but busy peer support list. Subscribe at http: I lwww. yahoogroups. coml communi ty!firebird-php.
• ForAJJOI>B:http:llphplens.comllensllensforumltopics.php?id=4
• For phpEclipse: http: I lwww. phpeclipse. deltiki-forums. php
Resources: The best starting point for PHP is the manual (http: I lwww. php. netl docs. php). The site http: I lwww. hotscripts. comiPHP lindex. html is recommended as a source of myriad scripts and classes that Firebird can be plugged into.
Python Klnterbasi>B is a Python extension package that implements Python I>atabase API 2.0-compliant support for Firebird. In addition to the minimal feature set of the stan• dard Python I>atabase API, Kinterbasi>B exposes the entire native Firebird dient API. The newest version available is a late pre-release v.3.1, declared tobe production ready. The package is distributed free under a permissive BSI>-style license that both commercial and non-commercial users should find agreeable.
Support, downloads, online documentation, and information: http:llkinterbasdb.sourceforge.netl
Perl
The I> BI is a database interface module for Perl. It defines a set of methods, variables, and conventions that provide a consistent database interface independent of the actual database being used. I>BI>::InterBase is an open source I> BI driver for Fjrebird and InterBase, hosted at SoureeParge (http: I lsourceforge. net/projectsl dbi-interbase). The project wel• comes both developers and users.
Support: Join the mailing list at http: I llists. sourceforge. netlmailmanllistinfol dbi-interbase-devel.
Downloads: Go to http: I lwww. cpan. orglmoduleslby-moduleiDBD for the latest · stable release; visit http: I ldbi. interbase.or. id for both stable and development releases.
931 APPENDIX IV Database Repair How-to
You HAVE TO TRYVERY HARD TO CORRUPT a Firebird database-it's designed to survive the hard knocks that break databases in other systems. You will know a database has been corrupted ifyou cannot connect to it or back it up and a message in the firebird log, or from gbak -b, teils you that there is corruption, or some other message reports a check• sumerror. If you want to understand how corruption might have occurred in your database, refer back to the section "How to Corrupt a Firebird Database," at the end of Chapter 15.1
Eight Steps to Recovery
This appendix describes the steps you need to take, using the command-line tools gfiX and gbak, to try to recover undamaged data from some kinds of corruption. Be aware, however, that there are certain kinds of severe corruption that this procedure cannot fix. Refer to Appendix XII for resources available under those circumstances. To use gfix and gbak for this procedure, cd to the Firebird /bin directory on the server machine.
Get Exclusive Access The first thing to do when corruption is reported is to get all users off the system. Do not permit anyone to attempt any further work. Continuing to try to use the database might make the recoverable irrecoverable. Database validation requires exclusive access to the database, otherwise you will see this message when you try to run gfix:
OBJECT database name IS IN USE
The same message may appear if you are the only user but have another transac• tion in progress. The isql utility, for example, uses up to three concurrent transactions. Stop isql or any other admin applications you might have running.
1. At the time of this writing, the author heard of the first case of a new way to corrupt databases. The victim disregarded all advice and placed a database in an NFS directory. He then proceeded to connect clients to it via two Firebird 1.5 Classic servers on different host machines, neither of which owned the hard disk where the database was. He got corruption "in spades."
933 Appendix IV
To get exclusive access, perform a database shutdown, under the SYSDBA account or the account of the database owner. Instructions are in Chapter 39. For example, this command willlock out all other login attempts and force a shutdown in 2 minutes:
gfix -sh -force 120 -user SYSDBA -password yourpword
Make a Working File Copy At this point, gbak cannot back up a database containing corrupt data. Once you have exclusive access, make a filesystem copy (not a gbak file) of the database flle. Use the cp command on POSIX or, on Windows, the copy command or an equivalent copy/paste action in the GUI interface. Make sure there are no users connected at this point-not even yourselfl For example, on Windows, in the database directory:
copy damaged. fdb repaircopy.fdb
CAUTION Even if you can restore a mended database that reported checksum errors, the extent of data lass may be difficult to determine. If this is a concern, you may want to locate an earlier backup from which you can retrieve missing data after validating and repairing corrupt structures in your current database.
Work with repaircopy.fdb.
Perform the Validation The gfix switches -v[alidate] and -f[ull] are used first, to check record and page struc• tures. This checking process reports corrupt structures and releases unassigned record fragments or "orphan pages" (i.e., pages that are allocated but unassigned to any data structures).
gfix -v -full {path}repaircopy.fdb -user SYSDBA -password yourpword
The switch -n[o update] can be used with -v, to validate and report on corrupt or misallocated structures without attempting to fix them:
gfix -v -n {path}repaircopy.fdb -user SYSDBA -password yourpword
Ifpersistent checksum errors are getting in the way ofvalidation, use the -i[gnore] switch to have the validation ignore them:
gfix -v -n -i {path}repaircopy.fdb -user SYSDBA -password yourpword
934 Database Repair How-to
Mend Corrupted Pages If gfix validation reports darnage to data, the next step is tomend (or repair) the data• base by putting those structures out of the way. The -m[end) switch marks corrupt records as unavailable, so they will be skipped during a subsequent backup. Include a -f[ull) switch torequest mend for all corrupt structures and an -i[gnore) switch to bypass checksum errors during the mend. gfix -mend -full -ignore {path}repaircopy.fdb -user SYSDBA -password yourpword or, briefly gfix -m -f -i {path}repaircopy.fdb -user SYSDBA -password yourpword
Validate After -mend After the -mend command completes its work, again do gfix -v -full {path}repaircopy.fdb -user SYSDBA -password yourpword to check whether any corrupt structures remain.
Clean and Recover the Database Next, do a full backup and restore using gbak, even if errors are still being reported. Include the -v[erbose) switch to watch progress. In its simplest form, the backup com• mand would be (all in one command): gbak -b -v -i {path}repaircopy.fdb {path}repaircopy.fbk -user SYSDBA -password yourpword
Dealing with gbak Complications During Backup
Garhage collection problems might cause gbak to fall. If this happens, try again, adding the -[g) switch to signify "no garbage collection": gbak -b -v -i -g {path}repaircopy.fdb {path}repaircopy.fbk -user SYSDBA -password yourpword
If there is corruption in record versions associated with a limbo transaction, you may need to include the -limbo switch: gbak -b -v -i -g -1 {path}repaircopy.fdb {path}repaircopy.fbk -user SYSDBA -password yourpword
935 AppendixW
Restore the Cleaned Backup As a New Database Now create a new database from the backup, using the -v[erbose) switch to watch what is being restored:
gbak -create -v {path}repaircopy.fbk{path} reborn.fdb -user SYSDBA -password yourpword
Validate the Restored Database Verify that restoring the database fixed the problems by validating the restored data• base with the -n[o update) switch:
gfix -v -full {path}reborn.fdb -user SYSDBA -password yourpword
If there are problems on restore, you may need to consider further attempts using other gbak switches to eliminate the sources of these problems, for example:
• The -i[nactive) switch will eliminate problems with damaged indexes, by restor• ing without activating any indexes. Afterward, you can activate the indexes manually, one at a time, until the problern index is found.
• The -o[ne_at_a_time) switch will restore and commit each table, one by one, allowing you restore good tables and bypass the problern ones.
How to Proceed If Problems Remain If the preceding steps do not work, but you are still able to access the corrupt database, you may still be able to transfer table structures and data from the damaged database to a new one, using the qli (Query Language Interpreter) tool. qli is in your Firebird /bin directory, and a syntax manual in Adobe PDF format can be downloaded from http: I lwww. ibphoenix. com/ downloads/ qli_ syntax. pdf. qli is an old tool, but it still works when you need it. Search the Web for how-tos on pumping data between data• bases using qli. Look inAppendixVfor links to do-it-yourselfrepair tools that might be able to get you further in your quest to recover damaged data. There are companies that supply database recovery and repair services for severely damaged Firebird and InterBase databases-although, at the time of this writ• ing, the author had yet to hear of a Firebird database that had been corrupted to the state of needing a magician!
936 APPENDIX V Administration Tools
ÜNE OF THE "PLEASANT PROBLEMS" A NEWBIE USer of Firebird has is to choose tools. Why? Because the Firebird community is loaded with a plethora of excellent tools, both com• mercial and free. Nearly all commercial vendors provide free trial versions, so your warst problern is to find the one that suits you best!
Graphical Admin Desktops The following list is but a sampling of some of the more popular items. For fulllistings, seehttp://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_admin_tools.
Database Workbench
Database Workbench can connect to any Firebird server, on any platform. It features a consistent visual interface, a browser for metadata and dependencies, stored pro• cedure debugging, data migration tools, import/ export, a BLOß editor, user and permissions management, a test data generator, metadata search, a code snippet repository, metadata printout, automatic trigger generation for auto-incrementing keys and case-insensitive search columns, and more.
Environment: Windows. Other information: Commercial software by Upscene Productions. Free trial available at http: I lwww. upscene. com.
IBExpert This feature-loaded administration tool has a hyperlinking feature and history replay in all editors. It also offers a SQL monitor, a visual query builder, selectable output options for queries, background query execution, direct CSV data import, code com• pletion, debug, trace and tips for PSQL, customizable keyboard templates, BLOß editing and display (including images and hex), users and permissions editors, an "autogrant" option for automatic permissions creation on new objects, entity model• ing, a database comparer with creation of update scripts, plan and performance profiling, scripting tools including scripted transfer of BLOB data, pre-defined and user-defined schema reports, a backup wizard, communications diagnosis, multiple• language support, and more.
937 Appendix V
Environment: Windows. Other information: Commercial software by H-K Software GmbH. Free Personal Edition available. Educational version also available.
BlazeTop BlazeTop features an unusual, modular interface to the basic tools that helps to solve "feature overload" -you install only the modules you want to use. It includes a smart text editor that creates statement templates and also includes schema management, a SQL Monitor, interactive data editing, a Delphi-style object inspector for database objects, and explicit transaction control. lt can run multiple database sessions simultaneously.
Environment: Windows. Other information: Commercial software by Devrace. Free trial available at http://www.devrace.com/en/blazetop.
IBAccess This cross-platform database manager provides a graphical front-end for implementing all tasks that Firebird distros do with the command-line tools, making it compatible with Classic servers as well as Superservers. It offers online help, desktop configuration per user or per server, and the ability to runmultiple instances to perform lengthy tasks in background. With it, you can also monitor SQL statements during execution; browse and manage data objects, permissions, and BLOBs; execute queries with replaceable parameters; and execute scripts step by step. Environments: Linux, Windows. Other information: Open source (Mozilla Public License), free software byToni Martir. Sources available. See http: I /www. ibaccess. org.
IBAdmin This is an online and offline database manager, featuringvisual database designleASE tools, a SQL debugger, Code-Insight, code completion, database compare with optional synchronized script update, macro capability, script runner tools, version control for PSQL modules, a database explorer tool, and a plug-in feature for adding your own tools (sample supplied). Environments: Windows, Linux (cut-down version). Other information: Commercial software by Sqlly Development. Products avail• able in professional, standard, and "lite" versions. 'frial downloads available at http://www.sqlly.com.
938 Administration Tools
IB- SOL- A lighter weight multi-tool utility, this is a replacement for the old Borland WISQL, with a "live" browser for data and metadata, metadata extract, datapump, export, user man• agement, SQL monitaring and profiling, scripting, interactive querying with replaceable parameters, and plan display. Features "layouts" that automatically save login details for different databases and a Query Forms tool for saving specific queries for future reuse. IB_SQL can be downloaded as a binary or customized and compiled from Deiphi sources distributed in the IB Objects evaluation kits (IB_SQL.dpr, in the root directory). If compiled this way, IB_SQL will displayamodal nag screen when startedoutside the Deiphi or C++Builder IDE.
Environment: Windows. Other information: Free software. Sources are subject to Trustware licensing. See http: I /www. ibobj ects. com for both the IB_SQL binary and latest IBO evaluation kit.
IBOConsole This is the re-engineered version ofthe IBOConsole utility that shipped with the origi• nal InterBase 6 open source package, with enhancements, bug fixes, and SUpport for Firebird developments. It implements the Services API (user management, backup, etc.) and interactive query and script features. The API abstraction layer is IB Objects instead ofBorland's InterBaseXpress.
Environment: Windows. Other information: Free, open source (InterBase Public License) software by Lorenzo Mengoni. Sources available. Downloads and details at http://www.mengoni.it.
Backup Tools
DBak DBak is an alternative database backup utility that does not use gbak or the Services API. It backs up a database into a new one, using DDL scripts and data transfer. Its API abstraction layer is IB Objects. Because DBak operates within a single snapshot transaction, it provides a reliable snapshot of database state at the start of the backup. As well as backup and restore, DBak can perform a direct rebuild, generating a working copy of a database without any intermediate stage. Processing can be customized in many ways, making it particularly useful to assist witli a controlled recovery from some kinds of corruption and for automating schema
939 Appendix V
upgrades. The distribution includes both a graphical user interface and a console ver• sion for batch and scheduled operations.
Environment: Windows. Other information: Executables and help file, by Telesis Computing Pty Ltd, are free. The full source version is available for a small fee under Trustware licensing. Information and download can be found at http: I lwww. telesiscomputing. com. aul dbk. htm. Note that this is not gbak and it is important to read the documentation and understand the differences.
gbak BackupRunner
This is an elegant, small footprint, graphical front-end for the Firebird gbak utility. It does not use the Services API, providing instead direct flags to set gbak switches. The utility optionally generates the verbose output directly into a text window, which can be saved as a log. It requires gbak.exe to be present.
Environment: Windows. Other information: Free binary by Marco Wobben. Information and download can be found at http: I lwww. bcp- software. nl/backuprunner.
Time To Backup This is a suite of programs for setting up scheduled Firebird backups as a Windows service or a Iinux daemon on one or morehast machines. It comes with a GUI config• uration and control interface for local or remote use. A console-only configuration interface is also available for Linux.
Environments: Windows, Iinux. Other information: Open source software, under LGPL licensing, by Sqlly Development. The tools are distributed free with full Object Pascal sources. For information and downloads, see http: I lwww. sqll y. comltimetobackup. asp.
Miscellaneous
IBSurgeon Database Repair Tools The IBSurgeon company distributes a range of tools for diagnosing and repairing corrupted databases. Their diagnostic tools, IBFirstAid Diagnostician and IBSurgeon Viewer, can downloaded free. The tools that perform the actual repairs need to be pur• chased. Same kinds of darnage are impossible to recover by an automatic tool, but the company claims that a damaged database can be brought back into production in 70 percent of cases.
940 Administration Tools
To read about the tools and for advice about how to proceed when you have a cor• rupted database that gfixwon't fix, see http: I lwww. ib-aid.com.
Interbase DataPump Interbase DataPump allows you to pump data and migrate from any ADO/BDE/ODBC sources (such as dBase, Paradox, Access, MSSQL, Sybase, Oracle, DB2, InterBase, etc.) and native Firebird databases into a new Firebird database simply and with full control of the process. It calculates important details like object creation order and dependencies. The tool can generate a complete SQL script to create a Firebird database based on the metadata of anADO/BDE/ODBC source, including full mapping of data types, indexes, keys, auto-incrementing fields, referential integrity, and validation checks. It can create the required generators and triggers for auto-inc columns and set the proper initial values.
Environment: Windows. Other information: Free software from Clever Components. More information and downloads can be found at http: I lwww. clevercomponents. comlproductsl datapumplibdatapump.asp.
Advanced Data Generator for Firebird Advanced Data Generator is a tool for generating test data that simulates real-life data. It features random address generation, referential integrity support, and BLOB sup• port. It comes with a large data library of company, personal, and geographic names, and it can also use your own custom or legacy data. Multiple projects can be queued. Data-generation environment: Windows. Other information: Commercial software by Upscene Productions. Information and trial download can be found at http: I lwww. upscene. com.
Permissions Managers Try these tools for simplifying user management, roles administration, and SQL permissions:
• Grant Manager, by Eadsoft, at http: I lwww. eadsoft. coml englishlproductsl grantmanager. This Windows shareware program is available as a 30-day "try-and-buy" stand-alone utility or as a Delphi SDK.
• Grant Master, by Studio Plus Inc. More information on this Windows shareware program and a download of a 30-day trial are available at http:llwww.studioplus.com.uaiGrantMasteriGrantMaster.phtml.
941 Appendix V
Where to Look for More Tools and Information
The "master Iist" for third-party tools can be found in the Downloads ~ Contributed section of http: I lwww. ibphoenix. com. Tools developers also post announcements to the mailing Iist firebird-tools@yahoogroups. com. You can subscribe to the Iist by going to http: I lgroups. yahoo. comlgrouplfirebird-tools or simply browse the mirror newsgroup (egroups. ib-tools) at news: I lnews. atkin. com. Don't overlook a Google search as a way to locate tools for specific tasks. Generally, entering the words "firebird," "interbase," and a keyword identifying the task will gen• erate several good leads.
942 APPENDIX VI The Sample Database
TUE SAMPLE DATABASE IS INSTALLED with Firebird, in the directory I examples, beneath the Firebird root. In Firebird 1.0, it is a dialect 1 database and its name is employee.gdb. In v.l.5, it is dialect 3 and is named employee.fdb. Structurally, it is the same database. This database was created many years ago, probably by trainee support staff. It is not a model of good design. Moreover, it does not have a default character set. However, it does, at least, provide a set of data to experiment with. The sample database comes complete with a backup (employee.gbk and employee.tbk, respectively) so, no matter how you mess it up, you can always restore a fresh copy.
Building the Employee Database from Scripts
When a Firebird installer kit is made, the employee database is built and backed up each time from scripts. The scripts empddl.sql (which builds the metadata) and empdml.sql (which populates the database) are available from the Downloads area of http: I lwww. apress. com, with a few amendments:
• Adefault character set has been included, set to IS08859_1, which is compatible with the English-language data in empdml.sql.
• A SET SQL DIALECT 3 statement has been added since, without it, some tools will create it as dialect 1 and any experiments you try with Firebird's native SQL dialect will fail or have unexpected results.
• Full path strings for the CREATE DATABASE statement have been included to reflect properly how real people create databases. The "live" string will create the database on a POSIX server in a directory named I datal examples. The com• mented string will create the database in C:\data \examples. Uncomment, comment, and modify to suit your own needs.
• The quoting on the CREATE DATABASE path string has been corrected to single quotes.
• The empdml.sql script begins with a SET NAMES IS08859_1 statement, to ensure that the incoming text data get stored in the correct character set.
943 Appendix VI
In spite of these minor changes, the employee database remains substantially as it always was-an example of how not to design databases! A new sample database for Firebird is in the pipeline. It should be ready for release during the latter part of 2004, at http: I /www. apress. com and at other sites around the Firebird community. Eventually, it will find its way into the distribution kits.
944 APPENDIX VII Firebird Limits
MOST OF THE ACTUAL LIMITS ON A Firebird database are practical rather than defined by the software. For example, you can define up to 32,767 columns in a table, but why would you want to? Listed in TableVII-1 are a number oftheoretical and practicallim• its applicable to Firebird l.O.x and Firebird 1.5. Certain of these Iimits will rise in later versions, so make a point of studying release notes to track changes.
Table VII-1. Firebird l.O.x and 1.5 Limits OBJECT ITEM FIREBIRD t.O.X FIREBIRD 1.5 COMMENTS Identifiers Almost all objects 31 characters 31 characters Cannot use characters outside the range of USASCII (ASCIIZ). Constraint names 27 characters 27 characters Same character restrictions as above. Dates Barliest and latest January 1, 100 A.D. dates Latest December 31, 9999 A.D. NB: It is believed that the engine is susceptible to crashing if the system date of the server is set higher than the year 2039. Server Maximum 1,024 (TCP/IP) 1,024 (TCP/IP) The theoreticallimit is connected clients lower for Windows named pipes (NetBEUI)-the server is likely to hang at more than 930 concurrent connections. As a practical guideline, work on a base maximum of about 150 concurrent Superserver clients for a normal interactive application on a server oflow-to-medium specification, with low-to• moderate contention, before performance might make you consider upgrading. For Classic server, the numbers may be lower because each dient consumes more resources. continued
945 Appendix VII
Table VII-I. Firebird l.O.x and 1.5 Limits (continued) OBJECT ITEM FIREBIRD 1.0.X FIREBIRD 1.5 COMMENTS Maximum The number of databases numberof opened during a databases open transaction started by inone isc_start_multiple() is transaction limited only by available system resources. A transaction started by isc_start_transaction() limits concurrent database attachments to 16. Database Number oftables 32,767 32,767 Maximum size 7TB 7TB Theoreticallimit, approximate. There is no known record of a Firebird database as large as 7TB. Maximum ftle size Depends on the ftle system. FAT32 and ext2 are 2GB. Older NTFS and some ext3 are usually 4GB. Many 64-bit ftle systems place no limit on the size of a shared-access ftle. Maximum Theoretically, zl6 (65,536), number of ftles including shadow ftles. per database The limitation is more likely to be imposed by the operating system's limit on the number of ftles that can be opened simultaneously by one process. Some permit the limit to be raised. Maximum 16,384 bytes 16,384 bytes Other sizes are 1,024, page_size 2,048, 4,096 (default), and 8192 bytes Maximumcache 65,536 pages 65,536 pages Practicallimit depends buffers on available RAM. The total size (cache pages • page_size on Superserver; cache pages * page_size • no. of concurrent users on Classic server) should never be more than half of the available RAM. Consider 10,000 pages as a practicallimit and tweak backward or forward from there as performance dietat es.
946 Firebird Limits
Table VII-1. Firebird 1. O.x and 1.5 Limits (continued) OBJECT ITEM FIREBIRD 1.0.X FIREBIRD 1.5 COMMENTS Tables Maximum 255 255 Firebird keeps account of versions per table up to 255 formats for each table. The format version steps up by 1 each time a metadata change is done. When any table reaches the limit, the whole database becomes unavailable-it must be backed up and then work resumed on the restored version. Maximum row size 64KB 64KB Count bytes. BLOB and ARRAY columns each cost 8 bytes to store the ID; VARCHARs, byte length + 2; CHARs, byte-length; SMALLINT, 2; INTEGER, FLOAT, DATE and TIME, 4; BIGINT, DOUBLE PRECISION and TIMESTAMP, 8; NUMERIC and DECIMAL, 4 or 8, depending on precision. System tables have a row size limit of 128KB. Maximum z32rows z32rows More or less. Rows are number of rows enumerated with a 32-bit unsigned integer per table and a 32-bit row slot index. A table with long rows- either a lot of fields or very long fields-will store fewer records than a table with very short rows. All rows-including deleted ones-use up numbers; BLOBs and BLOB fragments stored on table data pages use up numbers, too. Maximum Depends on data types numberof used (see Maximum row columns size). Maximum 64 256 indexes per table Maximum size of 4GB on Windows NTFS, external file 2GB on Windows FAT32, Linux ext2 and ext3, and Solaris. continued
947 Appendix VII
Table VII-1. Firebird 1. O.x and 1.5 Limits (continued) OBJECT ITEM FIREBIRD l.O.X FIREBIRD 1.5 COMI4ENT5 Indexes Maximum size 252 bytes 252 bytes This theoretical maximum applies to a single-column index, where the character set is single-byte and uses the default (binary) collation sequence. Count bytes, not characters. The practical maximum is reduced by compound indexing, multi-byte character sets, and complex collation sequences. A single-column index using 3-byte UNICODE_FSS characters, for example, can have a maximum of (253 I 3) = 84 characters. Some IS08859 collation sequences consume up to 4 bytes per character just for the sorting attributes. Maximum 16 16 numberof segments Queries Maximum joined 256 256 Theoreticallimit. Other tables factors come to bear, such as the number ofBoolean evaluations required by the joins. From the point of view of resources and performance, the largest practicable number of table references is probably around 16. Always test with realistic volumes and kinds ofdata. Maximum There is no theoretical nesting level Iimit, but deep nesting of subqueries is sub-optimal for performance. Performance and resource consumption will determine your practical Iimit, on a query-by-query basis. Maximum size 32KB 32KB ofORDERBY key-set data
948 Firebird Limits
Table VII-1. Firebird l.O.x and 1.5 Limits (continued) OBJECT ITEM FIREBIRD 1.0.X FIREBIRD 1.5 COMMENTS PSQL Maximum size of 48KB 48KB Stored procedure and modules BLR trigger sources are compiled into BLR bytecode, which is more dense than the PSQL source. Still, if you hit this limit, try to break up your monumental procedure into a "master" procedure with callable chunks. Maximum Nolimit No limit Practicallimit is related to numberof the length limit for BLR events per byte code (above). module Levels of 750 on Windows, 1,000 embedded calls for POSIX platforms. BLOBs Maximum BLOB Maximum depends on size page_size. Fora 2KB page size, the BLOB size maximum is 512MB. For a 4KB page size, the BLOB size maximum is 4GB. For a 8KB page size, it's 32GB, and for a 16KB page size, it's 256GB. Maximum BLOBs are stored in segment size segments, the theoretical maximum size ofwhich is 64KB. However, in DSQL, it is not essential to define a non-default segment size, since dient settings cause BLOB data to be segmented for transport according to network packet size. Server economics determine the actual size of segments in storage.
949 APPENDIX VIII Character Sets and Collations
TABLE VIII -1 LISTS THE CHARACTER SETS and collations available when Firebird 1.5.0 was released. Some of those items listed are not available in earlier Firebird versions. If you have installed a later version and the character set or collation sequence you want is not listed here, read the release notes of your version and any other versions since v.l.S to see whether it has been added.
Table VIII-I. Character Setsand Collations, Firebird 1.5.0 ID NAME BYTES PER COLLATION LANGUAGE ALIASES CHARACTER 2 ASCII 1 ASCII English ASCII7, USASCII 56 BIG_5 2 BIG_S Chinese, BIG5, Vietnamese, DOS_950, Kore an WIN_950 50 CYRL 1 CYRL Russian 50 DB_RUS dßase Russian 50 PDOX_CYRL Paradox Russian 10 DOS437 1 DOS437 English-USA DOS_437 10 DB_DEU437 dBase German 10 DB_ESP437 dBase Spanish 10 DB_FRA437 dBase French 10 DB_FIN437 dBase Finnish 10 DB_ITA437 dBase Italian 10 DB_NLD437 dBaseDutch 10 DB_SVE437 dBase Swedish 10 DB_UK437 dBase English-UK 10 DB_US437 dBase English• USA 10 PDOX_ASCII Paradox ASCII codepage continued
951 Appendix VIII
Table VIII-I. Character Setsand Collations, Firebird 1.5.0 (continued) ID NAME BYTES PER COLLATION LANGUAGE ALIASES CHARACTER 10 PDOX_SWEDFIN Paradox Swedish/ Finnish code pages
10 PDOX_INTL Paradox International English code page 9 DOS737 1 DOS737 Greek DOS_737 15 DOS775 1 DOS775 Baltic DOS_775 11 DOS850 1 DOS850 Latin I (no Euro DOS_850 symbol) 11 DB_DEU850 German 11 DB_ESP850 Spanish 11 DB_FRA850 French 11 DB_FRC850 French-Canada 11 DB_ITA850 Italian 11 DB_NLD850 Dutch 11 DB_PTB850 Portuguese- Brazil 11 DB_SVE850 Swedish 11 DB_UK850 English-UK 11 DB_US850 English-USA 45 DOS852 1 DOS852 Latin II DOS_852 45 DB_CSY dBaseCzech 45 DB_PLK dBase Polish 45 DB_SLO dßase Slovakian 45 PDOX_PLK Paradox Polish 45 PDOX_HUN Paradox Hungarian 45 PDOX_SLO Paradox Slovakian 45 PDOX_CSY Paradox Czech 46 DOS857 1 DOS857 Turkish DOS_857 46 DB_TRK dßase Turkish 16 DOS858 1 DOS858 Latin I + Euro DOS_858 symbol 13 DOS860 1 DOS860 Portuguese DOS_860 13 DB_PTG860 dßase Portuguese 47 DOS861 1 DOS861 Icelandic DOS_861 47 PDOX_ISL Paradox Icelandic 17 DOS862 1 DOS862 Hebrew DOS_862 14 DOS863 1 DOS863 French-Canada DOS_863
952 Character Sets and Collations
Table VIII-1. Character Setsand Collations, Firebird 1.5. 0 (continued) ID NAME BYTES PER COLLATION LANGUAGE ALIASES CHARACTER 14 DB_FRC863 dBase French- Canada 18 DOS864 1 DOS864 Arabic DOS_864 12 DOS865 1 DOS865 Nordic DOS_865 12 DB_DAN865 dBase Danish 12 DB_NOR865 dBase Norwegian 12 PDOX_NORDAN4 Paradox Norwegian and Danish 48 DOS866 1 DOS866 Russian DOS_866 49 DOS869 1 DOS869 Modern Greek DOS_869 6 EUC1_0208 2 EUC1_0208 EUC Japanese EUCJ 57 GB_2312 2 GB_2312 Simplified Chinese DOS_936, (Hong Kong, PRC) GB2312, WIN_936 21 IS08859_1 1 IS08859_1 Latin 1 ANS!, IS088591, LATIN1 21 FR_ CA French-Canada 21 DA_DA Danish 21 DE_DE German 21 ES_ES Spanish 21 FI_FI Finnish 21 FR_FR French 21 IS_IS Icelandic 21 IT_IT Italian 21 NO_NO Norwegian 21 DU_NL Dutch 21 PT_PT Portuguese 21 sv_sv Swedish 21 EN_UK English-UK 21 EN_US English-USA 22 IS08859_2 1 IS08859_2 Latin 2-Central IS0-8859-2, European IS088592, (Croatian, Czech, LATIN2 Hungarian, Polish, Romanian, Serbian, Slovakian, Slovenian) 22 CS_CZ Czech continued
953 Appendix VIII
Table VIII-1. Character Setsand Collations, Firebird 1.5.0 (continued) ID NAME BYTES PER COLLATION LANGUAGE ALIASES CHARACTER 22 180_HUN Hungarian 23 1808859_3 1 1808859_3 Latin3-8outhern 180-8859-3, European 18088593, (Maltese, IATIN3 Esperanto) 34 1808859_4 1 1808859_4 Latin 4-Northern 180-8859-4, European 18088594, (Estonian, Latvian, IATIN4 Lithuanian, Greenlandic, Lappish) 35 1808859_5 1 1808859_5 Cyrillic (Russian) 180-8859-5, 18088595 36 1808859_6 1 1808859_6 Arabic 180-8859-6, 18088596 37 1808859_7 1 1808859_7 Greek 180-8859-7, 18088597 38 1808859_8 1 1808859_8 Hebrew 180-8859-8, 18088598 39 1808859_9 1 1808859_9 Latin5 180-8859-9, 18088599, IATIN5 40 1508859_13 1 1508859_13 Latin 7-Baltic Rim 150-8859-13, 180885913, IATIN7 44 K5C_5601 2 K8C_5601 Korean (Unified D08_949, Hangeul) K8C5601, WIN_949 44 K8C_DICTIONARY Korean- dictionary order collation 19 NEXT 1 NEXT NeXT8TEP encoding 19 NXT_U8 English-U8A 19 NXT_FRA French 19 NXT_ITA Italian 19 NXT_E8P 8panish 19 NXT_DEU German 0 NONE 1 NONE Code-page neutral; uppercasing limited to ASCII codes 97-122 1 OCTET8 1 OCTET8 Binary character BINARY
954 Character Sets and Collations
Table VIII-I. Character Setsand Collations, Firebird 1.5.0 (continued) ID NAME BYTES PER COLLATION LANGUAGE ALIASES CHARACTER 5 SJIS_0208 2 SJIS_0208 Japanese SJIS 3 UNICODE_FSS 3 UNICODE_FSS UNICODE SQL_TEXT, UTF-8, UTF8, UTF_FSS 51 WIN1250 1 WIN1250 ANSI-Central WIN_1250 European 51 PXW_PLK Polish 51 PXW_HUN Hungarian 51 PXW_CSY Czech 51 PXW_HUNDC Hungarian- dictionary sort 51 PXW_SLOV Slovakian 52 WIN1251 1 WIN1251 ANSI-Cyrillic WIN_1251 52 WIN1251_UA Ukrainian 52 PXW_CYRL Paradox Cyrillic (Russian) 53 WIN1252 1 WIN1252 ANSI-Latin I WIN_1252 53 PXW_SWEDFIN Swedishand Finnish 53 PXW_NORDAN4 Norwegian and Danish 53 PXW_INTL English- International 53 PXW_INTL850 Paradox Multi- lingual Latin I 53 PXW_SPAN Paradox Spanish 54 WIN1253 1 WIN1253 ANSIGreek WIN_1253 54 PXW_GREEK Paradox Greek 55 WIN1254 1 WIN1254 ANSI Thrkish WIN_1254 55 PXW_TURK Paradox 'furkish 58 WIN1255 1 WIN1255 ANSIHebrew WIN_1255 59 WIN1256 1 WIN1256 ANSIArabic WIN_1256 60 WIN1257 1 WIN1257 ANSIBaltic WIN_1257
955 APPENDIX IX System Tables and Views
WHEN YOU CREATE A DATABASE, Firebird begins by building its own tables in which to store the metadata for all database objects-not just your user-defined objects, but also its own internal objects. These tables are known as system tables. Following the metadata definitions for the system tables, you will find DDL listings for a number of views over the system that you might find useful.
System Tables The descriptions in this section are intended to assist with designing queries to help you understand and administer your databases. There are DDL Statements for changing metadata. It is not recommended at all to use SQL statements to update metadata tables. The risk of corruption from doing so is extreme. The following abbreviations are used in the tables:
• ID:X: Indexed
• UQ: Unique
Where there are compound indexes, numbers are given to indicate the precedence ofthe index segments.
RDB$CHARACTER_SETS stores keys for character sets available to the database.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$C~CTER_SET_NAJJE CHAR(31) y y Name of a character set known to Firebird. RDB$FORM_OF _USE CHAR(31) Notused. RDB$NUMBER_OF _C~CTERS INTEGER Number of characters in the set (not used for the available character sets). RDB$DEFAULT_COLLATE_NAJJE CHAR(31) Name of the binary collation sequence for the character set. It is always the same as the character set name. continued
957 Appendix !X
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$CHARACTER_SET_ID SMALLINT y y Unique identifier for this character set, wherever it is used. RDB$SYSTEM_FLAG SMALLINT Will be 1 if the character set is defined by the system at database create; 0 for a user• defined character set. RDB$DESCRIPTION BLOßTEXT Forstoring documentation. RDB$FUNCTION_NAME CHAR(31) Not used, but may become available for user-defined character sets that are accessed via an external function. RDB$BYTES_PER_CHARACTER SMALLINT Size of characters in the set, in bytes. For example, UNICODE_FSS uses 3 bytes per character.
RDB$CHECK_CONSTRAINTS cross-references names and triggers for CHECK and NOT NULL constraints.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$CONSTRAINT_NAME CHAR(31) y Name of a constraint. RDB$TR1GGER_NAME CHAR(31) y For a CHECK constraint, this is the name of the trigger that enforces the constraint. Fora NOT NULL constraint, this is the name of the column to which the constraint applies-the table name can be found through the constraint name.
958 System Tables and Views
RDB$COLLATIONS stores definitions of collation sequences.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$COLLATION_NAME VARCHAR(3ll y y Name ofthe collation sequence RDB$COLLATION_ID SMALUNT Y(l) Y(l) With the character set ID, unique collation identifier RDB$CHARACTER_SET_ID SMALUNT Y(2) Y(2) With the collation ID, unique collation identifier RDB$COLLATION_ATTRIBUTES CHAR(31) Not used externally RDB$SYSTEM_FLAG SMALLINT User-defined==O; system-defined==l orhigher RDB$DESCRIPTION BLOßTEXT Forstoring documentation RDB$FUNCTION_NAME CHAR(31) Not currently used
RDB$DATABASE is a single-record file containing basic information about the database.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$DESCRIPTION BLOßTEXT Comment text included with the CREATE DATABASE/ CREATE SCHEMAstatement is supposed to be written here. It doesn't happen. However, you can add any amount of text to it by way of documentation and it will survive a gbak and restore. RDB$RELATION_ID SMALLINT A number that steps up by 1 each time a new table or view is added to the database. RDB$SECURITY_CLASS CHAR(31) Can refer to a security dass defined in RDB$SECURITY_CLASSES, to apply databasewide access controllimits. RDB$CHARACTER_SET_NAME CHAR(3l) Default character set of the database. NULL if the character set is NONE.
959 Appendix !X
RDB$DEPENDENCIES stores dependencies between database objects.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$DEPENDENT_NAME CHAR(31) y Names the view, procedure, trigger, or computed column tracked by this record. RDB$DEPENDED_ON_NAME CHAR(31) y The table that the view, procedure, trigger, or computed column refers to. RDB$FIELD _NAME VARCHAR(31) Names one column in the depended-on tablethat the view, procedure, trigger, or computed column refers to. RDB$DEPENDENT_TYPE SMALLINT Identifies the object type (view, procedure, trigger, computed column). The number comes from the table RDB$TYPEs- objects are enumerated where RDB$FIELD_NAME = 'RDB$0BJECT_TYPE'. RDB$DEPENDED_ON_TYPE SMALLINT Identitles the type of the object depended on (same object paradigm as for RDB$DEPENDENT_TYPE).
RDB$EXCEPTIONS stores custom exceptions.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$EXCEPTION_NAME CHAR(31) y y Name ofthe custom exception RDB$EXCEPTION_NUMBER INTEGER y y System-assigned unique exception number RDB$MESSAGE VARCHAR(78) Custom message text RDB$DESCRIPTION BLOßTEXT Can be used for documentation RDB$SYSTEM_FLAG SMALLINT User-defined=O; system-defined=l orhigher
960 System Tables and Views
RDB$FIELD_DIMENSIONS stores information about dimensions of array columns.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FIELD_NAME CHAR(31) y Name ofthe array column. It must be a RDB$FIELD_NAME in the table RDB$FIELDS. RDB$DIMENSION SMALLINT Identifies one dimension in the array column. The first has the identifier 0. RDB$LOWER_BOUND INTEGER Lower bound of this dimension. RDB$UPPER_BOUND INTEGER Upper bound of this dimension.
RDB$FIELDS stores definitions of domains and of column names for tables and views. Each row for a non-domain column has a corresponding row in RDB$RELATION_FIELDS. In reality, every instance of RDB$FIELDS is a domain. You can, for example, do this:
CREATE TABLE ATABLE ( EXAMPLE VARCHAR(10) CHARACTER SET 1508859_1); COMMIT; SELECT RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME = 'ATABLE' AND RDB$FIELD_NAME = 'EXAMPLE'; RDB$FIELD_SOURCE
SQL$99 /* *I ALTER TABLE ATABLE ADD EXAMPLE2 SQL$99; COMMIT;
The new column is added, having the same attributes as the original.
961 Appendix !X
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FIELD _NAME CHAR(31) y y For domains, it is the domain name. For table and view columns, it is the internal, database-unique field name, linking to RDB$FIELD_SOURCE in RDB$REIATION_FIELDS. NB: Firebird creates a domain in this table for every column definition that is not derived from a user-defined domain. RDB$QUERY_NAME CHAR(31) Not used in Firebird. RDB$VALIDATION_BLR BLOBBLR Not used in Firebird. RDB$VALIDATION_SOURCE BLOBTEXT Not used in Firebird. RDB$COMPUTED_BLR BLOBBLR Binary language representation ofthe SQL expression that Firebird evaluates when a COMPUTED BY column is accessed. RDB$COMPUTED_SOURCE BLOBTEXT Original source text of the expression that defines a COMPUTED BY colurnn. RDB$DEFAULT_ VALUE BLOBBLR Default rule for the default value, in binary language representations. RDB$DEFAULT_SOURCE BLOBTEXT Ditto; in original form. RDB$FIELD _LENGTH SMALLINT Length of the column in bytes. Float, date, time, and integer are 4 bytes. Double precision, Biglnt, timestamp, and blob_id are 8 bytes. RDB$FIELD _SCALE SMALLINT Negativenumber representing the scale of a NUMERIC or DECIMAL column. RDB$FIELD_TYPE SMALLINT Number code of the data type defined for the column: 7=smallint, 8=integer, 12=date, 13=time, 14=char, 16=bigint, 27=double precision, 35=timestamp, 37=varchar, 26l=blob. Codes for numeric and decimal are the same as that ofthe integer-type that is used to store it. 962 System Tables and Views
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FIELD_SUB_TYPE SMALLINT BLOB subtype, namely O=untyped, 1=text, 2=BLR (binary language representation), 3=ACL (access controllist), 5=encoded table metadata, 6=description of a cross-database transaction that didn't complete normally. RDB$MISSING_ VALUE BLOBBLR Not used in Firebird. RDB$MISSING_SOURCE BLOßTEXT Not used in Firebird. RDB$DESCRIPTION BLOßTEXT Available to use for documentation. RDB$SYSTEM_FLAG SMALLINT 1=system table; anything eise, user-defined table. RDB$QUERY_HEADER BLOßTEXT Not used in Firebird. RDB$SEGMENT_LENGTH SMALLINT For BLOB columns, a suggested length for BLOB buffers. Not relevant in Firebird. RDB$EDIT_STRING VARCHAR(l25) Not used in Firebird. RDB$EXTERNAL_LENGTH SMALLINT Length of the field as it is in an external table. Always 0 for regular tables. RDB$EXTERNAL_SCALE SMALLINT Scale factor of an integer field in an external table; represents the power of 10 bywhich the integer is multiplied. RDB$EXTERNAL_TYPE SMALLINT Data type of the field as it is in an external table. Data types are the sarne as for regular tables, but include 40=null-terminated text (CSTRING). RDB$DIMENSIONS SMALLINT Number of dimensions defined, if column is an array type. Always 0 for non-array columns. RDB$NULL_FLAG SMALLINT Indicates whether column is nullable (empty) or non- nullable (1). continued
963 Appendix IX
(continued) COLUMN IDENTIFIER TYPE IDX IJQ DESCRIPTION RDB$CHARACTER_LENGTH SMALLINT Length of a CHAR or VARCHAR column, in characters (not bytes). RDB$COLLATION_ID SMALLINT Number ID of the collation sequence (if defined) for a character column or domain. RDB$CHARACTER_SET_ID SMALLINT Number ID ofthe character set for character columns, BLOß columns, or domains. Links to RDB$CHARACTER_SET_I Dcolumnin RDB$CHARACTER_SETS. RDB$FIELD _PRECISION SMALLINT Indicates the number of digits of precision available to the data type of the column.
RDB$FILES stores volume details of database secondary files and shadow files.
COLUMN IDENTIFIER TYPE IDX IJQ DESCRIPTION RDB$FILE_NAME VARCHAR(253) Name of a database secondary file (volume) in a multi-volume database, or a shadow flle. RDB$FILE_SEQUENCE SMALLINT Sequence in the volume order of database secondary files, or sequence in the shadow file set. RDB$FILE_START INTEGER Starting page number. RDB$FILE_LENGTH INTEGER File length, in database pages. RDB$FILE_FLAGS SMALLINT Interna! use. RDB$SHADOW_NUMBER SMALLINT Shadow set number. Required to identify the file as a member of a shadow set. If it is null or 0, Firebird assumes the file is a secondary database volume.
964 System Tables and Views
RDB$FILTERS stores and keeps track of information about BLOß filters.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FUNCTION_NAME CHAR(31) Unique name of the BLOB filter RDB$DESCRIPTION BLOßTEXT User-written documentation about the BLOB filter and the two subtypes it is meant to operate on RDB$MODULE_NAME VARCHAR(253) The name of the dynamic library I shared object where the BLOB filter code is located RDB$ENTRYPOINT CHAR(31) The entry point in the fllter library for this BLOB filter RDB$INPUT_SUB_TYPE SMALLINT Y(l) Y(l) The BLOB subtype ofthe data to be transformed RDB$0UTPUT_SUB_TYPE SMALLINT Y(2) Y(2) The BLOB subtypethat the input data is to be transformed to RDB$SYSTEM_FLAG SMALLINT Externally defined (i.e., user-defined=O, internally defined=l or greater)
RDB$FORMATS keeps account of the number of metadata changes performed on tables. Each time a table or view gets a change, it gets a new format number. The purpose is to allow applications to access a changed table without the need to recompile. When the format number of any table reaches 255, the whole database becomes inaccessible for querying. It is then neces• sary to back up the database, restore it, and resume work in the newly built database.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$RELATION_ID SMALLINT Y(l) Y(l) Number ID of a table or view in RDB$RELATIONS. RDB$FORMAT SMALLINT Y(2) Y(2) Identifier ofthe table format. There can be up to 255 such rows for any partiewar table. RDB$DESCRIPTOR BLOßFORMAT BLOB listing the columns and data attributes at the time the format record was created.
965 Appendix !X
RDB$FUNCTION_ARGUMENTS stores the attributes of arguments (parameters) of external functions.
COLUMN IDENTIFIER TYPE IDX liQ DESCRIPTION RDB$FUNCTION_NAME CHAR(31) y Unique name ofthe external function, matehing a function namein RDB$FUNCTIONS. RDB$ARGUMENT_POSITION SMALLINT Position of the argument in the argument Iist: l=first, 2=second, etc. RDB$MECHANISM SMALLINT Whether the argument is passed byvalue (0), byreference (1), by descriptor (2), or by BLOB descriptor (3). RDB$FIELD_TYPE SMALLINT Number code of the data type defmed for the column: 7=smallint, B=integer, 12=date, 13=time, 14=char, 16=bigint, 27=double precision, 35=timestamp, 37=varchar, 40=cstring {null-terminated string), 26l=blob. RDB$FIELD _SCALE SMALLINT Scale of an integer or fixed numeric argument. RDB$FIELD _LENGTH SMALLINT Length of the argument in bytes. For lengths of non-character types, referto RDB$FIELDS.RDB$ FJELD _LENGTH. RDB$FIELD_SUB_TYPE SMALLINT For BLOB arguments, BLOB subtype. RDB$CHARACTER_SET_ID SMALLINT Numeric ID for the character set, for a character argument, if applicable. RDB$FIELD_PRECISION SMALLINT Digits of precision available to the data type ofthe argument. RDB$CHARACTER_LENGTH SMALLINT Length of a CHAR or VARCHAR argument, in characters (not bytes).
966 System Tables and Views
RDB$FUNCTIONS stores information about external functions.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FUNCTION_NAME CHAR(31) y y Unique name of an external function. RDB$FUNCTION_TYPE SMALLINT Not currently used. RDB$QUERY_NAME CHAR(31) This is meant tobe an alternative name for the function, for use in isql queries. It doesn't work. RDB$DESCRIPTION BLOBTEXT Available for documentation. RDB$MODULE_NAME VARCHAR(253) Name of the dynamic library/shared object where the code for the function is located. RDB$ENTRYPOINT CHAR(31) Name of the entry point in the library where this function is to be found. RDB$RETURN_ARGUMENT SMALLINT Ordinal position ofthe return argument in the parameter list, relative to the input arguments. RDB$SYSTEM_FLAG SMALUNT Externally defined (user-defined)=l; system-defined=O.
RDB$GENERATORS stores names and IDs of generators.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$GENERATOR_NAME CHAR(31) Y y Name of generator. RDB$GENERATOR_ID RDB$GENERATOR_ID System-assigned unique ID for the generator. RDB$SYSTEM_FLAG SMALLINT O=user-defined; 1 or greater=system -defined. Firebird uses a nurober of generators internally.
967 Appendix !X
RDB$INDEX_SEGMENTS stores the segments and positions of multi-segment indexes.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$INDEX_NAME CHAR(31) y Name ofthe index. Must be kept consistent with the corresponding master record in RDB$INDICES. RDB$FIELD _NAME CHAR(31) Name of a key column in the index. Matches the RDB$FIELD _NAME of the database column, in RDB$RELATION_FIELDS. RDB$FIELD_POSITION SMALLINT Ordinal position of the column in the index (left to right).
RDB$INDICES stores definitions of all indexes.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$1NDEX_NAME CHAR(31) y y Unique name of the index. RDB$RELATION_NAME CHAR(31) y Name ofthe table the index applies to. Matches a RDB$RELATION_NAME in a record in RDB$RELATIONS. RDB$INDEX_ID SMALLINT Interna! number ID of the index. Writing to this column from an application will break the index. RDB$UNIQUE_FLAG SMALLINT Indicates whether the index is unique (l=unique, O=not unique). RDB$DESCRIPTION BLOBTEXT Available for documentation. RDB$SEGMENT_COUNT SMALLINT Number of segments (columns) in the index. RDB$INDEX_INACTIVE SMALLINT Indicates whether the index is currently inactive (l=inactive, O=active). RDB$INDEX_TYPE SMALLINT Not currently used; likely to distinguish regular indexes from expression indexes when the feature is implemented.
968 System Tables and Views
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FOREIGN_KEY VARCHAR(31) y Name ofthe associated foreign key constraint, ifany. RDB$SYSTEM_FLAG SMALLINT Indicates whether the index is system-defined (1 or greater) or user-defined (0). RDB$EXPRESSION_BLR BLOBBLR Binary language representation of an expression. Will be used for runtime evaluation when expression indexes are implemented. RDB$EXPRESSION_SOURCE BLOßTEXT Source of an expression. Will be used when expression indexes are implemented. RDB$STATISTICS DOUBLE PRECISION Stores the latest selectivity of the index, as calculated at start-up or by SET STATISTICS.
RDB$WG_FILES is an obsolete system table.
RDB$PAGES stores information about database pages.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$PAGE_NUMBER INTEGER Unique number of a database page that has been physically allocated RDB$RELATION_ID SMALLINT ID of table whose data are stored on the page RDB$PAGE_SEQUENCE INTEGER Sequence number of this page, relative to other pages allocated for this table RDB$PAGE_TYPE SMALLINT Identifies the type of data stored on the page (table data, index, etc.)
969 Appendix IX
RDB$PROCEDURE_PARAMETERS stores the parameters for stored procedures.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$PARAMETER_NAME CHAR(31) Y(2) Y(2) Name ofthe parameter RDB$PROCEDURE_NAME CHAR(31) Y(1) Y(l) Name of the procedure RDB$PARAMETER_NUMBER SMALLINT Sequence number of parameter RDB$PARAMETER_TYPE SMALLINT Indicates whether parameter is input (0) or output (1) RDB$FIELD _SOUR CE CHAR(31) System-generated unique columnname RDB$DESCRIPTION BLOBTEXT Available for documentation RDB$SYSTEM_FLAG SMALLINT Indicates whether the parameter is system• defined (1 or greater) or user-defined (0)
RDB$PROCEDURES stores definitions of stored procedures.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$PROCEDURE_NAME CHAR(31) y y Name ofprocedure RDB$PROCEDURE_ID SMALLINT y System-defined unique ID of procedure RDB$PROCEDURE_INPUTS SMALLINT Indicates whether there are input parameters (1) or not (0) RDB$PROCEDURE_OUTPUTS SMALLINT Indicates whether there are output parameters (1) or not (0) RDB$DESCRIPTION BLOBTEXT Available for documentation RDB$PROCEDURE_SOURCE BLOBTEXT Source code of the procedure RDB$PROCEDURE_BLR BLOBBLR Binary language representation (BLR) of the procedure code RDB$SECURITY_CLASS CHAR(31) Can refer to a security dass defined in RDB$SECURITY_CLASSES, to apply access control Iimits RDB$0WNER_NAME VARCHAR(31) Username ofthe procedure's owner
970 System Tables and Views
(continued) COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$RUNTIME BLOB SUMMARY Description of metadata of procedure, internal use for optimization RDB$SYSTEM_FLAG SMALLINT User-defined (0) or system• defined (l or greater)
RDB$REF _CONSTRAINTS stores actions for referential constraints.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$CONSTRAINT_NAME CHAR(31) y y Name of a referential constraint. RDB$CONST_NAME_UQ CHAR(31) Name of the primary key or unique constraint referred to in the HEFERENCES clause of this constraint. RDB$MATCH_OPTION CHAR(7) Current value is FULL in all cases; reserved for future use. RDB$UPDATE_RULE CHAR(ll) Referential integrity action applicable to this foreign key when the primary key is updated: NO ACTION I CASCADE I SET NULL I SET DEFAULT. RDB$DELETE_RULE CHAR(lll Referentlai integrity action applicable to this foreign key when the primary key is deleted. Rule options as defined in the column RDB$UPDATE_RULE.
RDB$RELATION_CONSTRAINTS stores information about table-level integrity constraints.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$CONSTRAINT_NAME CHAR(31) y y Name of a table-level constraint RDB$CONSTRAINT_TYPE CHAR(ll) Y(2) Primary key/unique/foreign key/pcheck/not null RDB$RELATION_NAME CHAR(31) Y(l) Name of the table this constraint applies to continued
971 Appendix IX
(continued)
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$DEFERRABLE CHAR(3) Currently NO in all cases; reserved for future implementation of deferred constraints RDB$1NITIALLY_DEFERRED CHAR(3) Ditto RDB$INDEX_NAME CHAR(31) y Name of the index that enforces the constraint (applicable if constraint is PRIMARY KEY, UNIQUE, or FOREIGN KEY)
RDB$RELATION_FIELDS stores the definitions of columns.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FIELD _NAME CHAR(31) Y(l) Y(l) Name ofthe column, unique in table or view. RDB$RELATION_NAME CHAR(31) Y(2) Y(2) Name of table or view. y (Another index.) RDB$FIELD _SOURCE CHAR(31) y The system-generated name (SQL$nn) for this column, correlated in RDB$FIELDS. If the column is based on a domain, the two correlated RDB$FIELD _SOURCE columns store the domain name. RDB$QUERY_NAME CHAR(31) Not used currently. RDB$BASE_FIELD CHAR(31) For a query only, the column name from the base table. The base table is identified by an intemal ID in the column RDB$VIEW_CONTEXT. RDB$EDIT_STRING VARCHAR(125) Not used in Firebird. RDB$FIELD_POSITION SMALLINT Position of column in table or view in relation to the other columns. Note that for tables, you can alter this using ALTER TABLE ALTER COLUMN POSITION n, where n is the new field_position. RDB$QUERY_HEADER BLOßTEXT Not used in Firebird. RDB$UPDATE_FLAG SMALLINT Not used in Firebird.
972 System Tables and Views
(continued)
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FIEill_ID SMALUNT Transient number ID, used intemally. It changes after backup and restore, so don't rely on it for queries in applications and don't changeit. RDB$VIEW_CONTEXT SMALLINT For a view column, intemal number ID for the base table where the field comes from. Don't modify this column. RDB$DESCRIPTION BLOßTEXT Can store documentation about the column. RDB$DEFAULT_ VALUE BLOBBLR Binary language representation of the DEFAULT clause, if any. RDB$SYSTEM_FIAG SMALLINT User-defined (0) or system- defined (1 or greater). RDB$SECURITY_CIASS CHAR(31) Can refer to a security dass definedin RDB$SECURITY_CIASSES, to apply access control limits to aii users of this column. RDB$COMPLEX_NAME CHARACTER(31) Reserved for future implementation. RDB$NULL_FIAG SMALUNT Indicates whether column is nullable (empty) or non- nullable (1). RDB$DEFAULT_SOURCE BLOßTEXT Original source text of the DEFAULT clause, if any. RDB$COLIATION_ID SMALLINT ID ofnon-default collation sequence (if any) for column.
RDB$RELATIONS stores tables and view definition header information.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$VIEW_BLR BLOBBLR Binary language representation of the query specification for a view; null on tables. RDB$VIEW_SOURCE BLOßTEXT The query specification for a view. continued
973 Appendix IX
(continued) COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$DESCRIPTION BLOßTEXT Optional documentation. RDB$RELATION_ID SMALLINT y Interna! number ID for the table. Don't modify this column. RDB$SYSTEM_FLAG SMAil..INT Indicates whether the tableis user-created (0) or system-created (1 or greater). Don't modify this flag on user-defined or system tables. RDB$DBKEY_LENGTH SMALLINT For views, aggregated length ofthe DB_KEY. It is 8 bytes for tables. For views, it is 8 * number of tables the view definition refers to. Don't modify this column. For more info about db_keys, refer to the "Optimization Topic" at the end of Chapter 30. RDB$FORMAT SMALLINT Interna! use-don't modify. RDB$FIELD_ID SMALLINT Interna! use-don't modify. It stores the number of columns in the table or view. RDB$RELATION_NAME CHAR(31) y y Name of the table or view. RDB$SECURITY_CLASS CHAR(31) Can refer to a security dass defined in RDB$SECURITY_CLASSES, to apply access control limits to all users of this table. RDB$EXTERNAL_FILE VARCHAR(253) Full path to the external data file, if any. RDB$RUNTIME BLOß SUMMARY Description of table's metadata. Interna! use for optimization. RDB$EXTERNAL_DESCRIPTION BLOBEFD BLOB of sub_type external_file_description, a text BLOB type that can be used for documentation.
RDB$0~ER_NAME VARCHAR(31) User name of table's or view's owner (creator), for SQL security purposes. RDB$DEFAULT_CLASS CHAR(31) Default security dass, applied when new columns are added to a table. RDB$FLAGS SMALLINT Interna! flags.
974 System Tables and Views
RDB$ROLES stores role definitions.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$ROLE_NAME VARCHAR(31) y y Holename RDB$0~ER_NAME VARCHAR(31) Username of role owner
RDB$SECURITY_CLASSES stores and tracks access controllists.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$SECURITY_CLASS CHAR(31) y y Name of security dass. This name must stay consistent in all places where it is used (RDB$DATABASE, RDB$RELATIONS, RDB$RELATION_FIELDS). RDB$ACL BLOBACL Access cantrollist associated with the security dass. It enumerates users and their permissions. RDB$DESCRIPTION BLOßTEXT Documentation of the security dass here defined.
RDB$TRANSACTIONS tracks cross-database transactions.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$TRANSACTION_ID INTEGER y y Unique ID ofthe transaction being tracked RDB$TRANSACTION_STATE SMALLINT State ofthe transaction: limbo(O), committed(l), rolled back (2) RDB$TIMESTAMP TIMESTAMP For future implementation RDB$TRANSACTION_ BLOBT BLOß of sub_type DESCRIPTION transaction_description, describing a prepared multi-database transaction, available in case a lost connection cannot be restored
975 Appendix IX
RDB$TRIGGER_MESSAGES stores trigger message definitions (system use).
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$TRIGGER_NAME CHAR(31) y Name of the trigger the message is associated with RDB$MESSAGE_NUMBER SMALLINT Message nurober (1 to a maximum of 32767) RDB$MESSAGE VARCHAR(78) Trigger message text
RDB$TRIGGERS stores definitions of all triggers.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$TRIGGER_NAME CHAR(31) y y Name ofthe trigger. RDB$RELATION_NAME CHAR(31) y Name of the table or view that the trigger is for. RDB$TRIGGER_SEQUENCE SMALLINT Sequence (position) of trigger. Zero usually means no sequence was defined. RDB$TRIGGER_TYPE SMALLINT 1=before insert, 2=after insert, 3=before update, 4=after update, S=before delete, 6=after delete. Multi• event triggers (Firebird 1.5 and onward) have various trigger types using higher numbers. The actual type code depends on which events are covered and the order in which the events are presented. (NB: There is no apparent reason that the order of events should make a difference to the trigger_type code.) RDB$TRIGGER_SOURCE BLOBTEXT Stores the PSQL source code for the trigger. RDB$TRIGGER_BLR BLOBBLR Stores the binary language representation of the trigger. RDB$DESCRIPTION BLOBTEXT Optional documentation. RDB$TRIGGER_INACTIVE SMALLINT Whether the trigger is currently inactive (1=inactive, O=active). RDB$SYSTEM_FLAG SMALLINT User-defined (0) or system• defined (1 or greater). RDB$FLAGS SMALLINT Interna! use.
976 System Tables and Views
RDB$TYPES stores definitions of enumerated types used araund Firebird.
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FIELD_NAME CHAR(31) Column name for which this enumeration is defined. Note that the same column name appears consistently in multiple system tables. RDB$TYPE SMALUNT Enumeration ID for type that RDB$TYPE_NAME identifies. The series of number is unique within a single enumerated type (e.g., O=table, l=view, 2=trigger, 3=computed column, 4=validation, 5=procedure are all types of RDB$0BJECT_TYPE). RDB$TYPE_NAME CHAR(31) y The text representation of the type identified by the RDB$FIELD_NAME value and the RDB$TYPE value. RDB$DESCRIPTION BLOßTEXT Optional documentation. RDB$SYSTEM_FLAG SMALLINT User-defined (0) or system- defined (1 or greater).
RDB$USER_PRMLEGES stores SQL permissions.
COLU"N IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$USER CHAR(31) y User who has been granted the permission RDB$GRANTOR CHAR(31) Name of user who granted the permission RDB$PRMLEGE CHAR(6) The privilege that is granted by the permission RDB$GRANT_OPTION SMALLINT Whether the permission carries WITH GRANT OPTION authority. l=Yes, O=No. RDB$RELATION_NAME CHAR(31) y The object on which the permission has been granted continued
977 Appendix !X
(continued)
COLUMN IDENTIFIER TYPE IDX UQ DESCRIPTION RDB$FIELD _NAME CHAR(3l) Name of a column to which a column-level privilege applies (UPDATE or HEFERENCES privileges only) RDB$USER_TYPE SMALUNT Identifies the type of user that was granted the permission (e.g., a user, procedure, view, etc.) RDB$0BJECT_TYPE SMALUNT Identifies the type of object on which the privilege was granted
RDB$VIEW _RELATIONS is an obsolete table.
System Views
The following system views are a subset of those defined in the SQL-92 standard. They can provide useful information about your data. You might like to copy the listings into a script and instaU the views in all your databases. CHECK_CONSTRAINTS lists all of the CHECK constraints defined in the database, with the source of the constraint definition.
CREATE VIEW CHECK_CONSTRAINTS ( CONSTRAINT_NAME, CHECK_CLAUSE ) AS SELECT RDB$CONSTRAINT_NAME, RDB$TRIGGER_SOURCE FROM RDB$CHECK_CONSTRAINTS RC, RDB$TRIGGERS RT WHERE RT.RDB$TRIGGER_NAME = RC.RDB$TRIGGER_NAME;
CONSTRAINTS_COLUMN_USAGE lists columns used byPRIMARYKEYand UNIQUE constraints and those defining FOREIGN KEY constraints.
CREATE VIEW CONSTRAINTS_COLUMN_USAGE ( TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME ) AS SELECT RDB$RELATION_NAME, RDB$FIELD_NAME, RDB$CONSTRAINT_NAME FROM RDB$RELATION_CONSTRAINTS RC, RDB$INDEX_SEGMENTS RI WHERE RI.RDB$INDEX_NAME = RC.RDB$INDEX_NAME;
978 System Tables and Views
REFERENTIAL_CONSTRAINTS lists all the referential constraints defined in a database.
CREATE VIEW REFERENTIAL_CONSTRAINTS CONSTRAINT_NAME, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE ) AS SELECT RDB$CONSTRAINT_NAME, RDB$CONST_NAME_UQ, RDB$MATCH_OPTION, RDB$UPDATE_RULE, RDB$DELETE_RULE FROM RDB$REF_CONSTRAINTS;
TABLE_CONSTRAINTS lists the table-level constraints.
CREATE VIEW TABLE_CONSTRAINTS ( CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE, IS_DEFERRABLE, INITIALLY_DEFERRED ) AS SELECT RDB$CONSTRAINT_NAME, RDB$RELATION_NAME, RDB$CONSTRAINT_TYPE, RDB$DEFERRABLE, RDB$INITIALLY_DEFERRED FROM RDB$RELATION_CONSTRAINTS;
979 APPENDIX X Error Codes
THE ERROR CODES RETURNED TO CLIENTS or PSQL modules by Firebird 1.5 .0 are listed in Table X-1. A few codes are unavailable to lower versions of Firebird. It is important to ensure that both server and dient have the correct version of firebird.msg (interbase.msg for Firebird l.O.x) stored in the Firebird root directory. It is not manda• tory to instaU the *.msg file on clients but, if its present, it must be the correct one.
TableX-1. Firebird 1.5.0ErrorCodes SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE 101 335544366 segment Segment buffer length shorter than expected 100 335544338 from_no_match No match for first value expression 100 335544354 no_record Invalid database key 100 335544367 segstr_eof Attempted retrieval ofmore segments than exist 100 335544374 stream_eof Attempt to fetch past the last record in a record stream -84 335544554 nonsql_security_rel Table/procedure has non-SQL security dass defined -84 335544555 nonsql_security_fld Column has non-SQL security dass defined -84 335544668 dsql_procedure_use_err Procedure
981 Appendix X
Table X-1. Firebird 1.5. 0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -85 335544753 usrname_not_found The user name specified was not found in the security database -85 335544754 error_adding_sec_record An error occurred while attempting to add the user. -85 335544755 error_modifying_sec_record An error occurred while attempting to modify the user record. -85 335544756 error_deleting_sec_record An error occurred while attempting to delete the user record. -85 335544757 error_updating_sec_db An error occurred while updating the security database. -103 335544571 dsql_constant_err Data type for constant unknown -104 335544343 invalid_blr Invalid request BLR at offset
982 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -104 335544763 invalid_string_constant Astring constant is delimited by double quotes -104 335544764 transitional_date DATE must be changed to TIMESTAMP -104 335544796 sql_dialect_datatype_unsupport Client SQL dialect
983 Appendix X
Table X-1. Firebird 1.5. 0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -150 335544360 read_only_rel Attempted update ofread-only table -150 335544362 read_only_ view Cannot update read-only view
984 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCOOE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -204 335544532 ref_cnstrnt_notfound Name ofReferential Constraint not defined in constraints table. -204 335544551 grant_o bj_notfound Could not find table/procedure for GRANT -204 335544568 text_subtype Implementation oftext subtype
985 Appendix X
Table X-1. Firebird 1.5. 0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -204 335544818 bad_skip_param Invalid parameter to SKIP. Only integers >= 0 are allowed. -204 336003085 dsql_ambiguous_field_name Ambiguous field name between
986 ErrorCodes
Table X-1. Firebird 1.5. 0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -292 335544534 ref_cnstrnt_update Cannot update constraints (RDB$REF _CONSTRAINTS). -293 335544535 check_cnstrnt_update Cannot update constraints (RDB$CHECK_CONSTRAINTS). -294 335544536 check_cnstrnt_del Cannot delete CHECK constraint entry (RDB$CHECK_ CONSTRAINTS) -295 335544545 rel_cnstrnt_update Cannot update constraints (RDB$RELATION_CONSTRAINTS). -296 335544547 invld_cnstrnt_type Interna! gds software consistency check (invalid RDB$CONSTRAINT_TYPE) -297 335544558 check_constraint Operation violates CHECK constraint
987 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -502 335544574 dsql_decl_err Declared cursor already exists -502 335544576 dsql_cursor_open_err Attempt to reopen an open cursor -504 335544572 dsql_cursor_err Cursor unknown -508 335544348 no_cur_rec No current record for fetch operation -510 335544575 dsql_cursor_update_err Cursor not updatable -518 335544582 dsql_request_err Request unknown -519 335544688 dsql_open_cursor_request The prepare statement identifies a prepare statement with an open cursor -530 335544466 foreign_key Violation ofFOREIGN KEY constraint "
988 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -599 335544607 node_err Gen.c: node not supported -599 335544625 node_name_err A node name is not permitted in a secondary, shadow, cache or log file name -600 335544680 crrp_data_err Sort error: corruption in data structure -601 335544646 db_or_file_exists Database or file exists -604 335544593 dsql_max_arr_dim_exceeded Array declared with too many dimensions -604 335544594 dsql_arr_range_error Illegal array dimension range -605 335544682 dsql_field_ref Inappropriate self-reference ofcolumn -607 335544351 no_meta_update Unsuccessful metadata update -607 335544549 systrig_update Cannot modify or erase a system trigger -607 335544657 dsql_no_blob_array Array/BLOB/DATE data types not allowed in arithmetic -607 335544746 reftable_requires_pk "REFERENCES table" without "(column)" requires PRIMARY KEY on referenced table -607 335544815 generator_name GENERATOR
989 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -616 335544539 integ__index_del Cannot delete index used by an Integrity Constraint -616 335544540 integ__index_mod Cannot modify index used by an Integrity Constraint -616 335544541 check_trig__del Cannot delete trigger used by a CHECK Constraint -616 335544543 cnstrnt_fld_del Cannot delete column being used in an Integrity Constraint. -616 335544630 dependency There are
990 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -685 335544465 bad_segstr_type Invalid BLOB type for operation -685 335544670 blob_idx_err Attempt to index BLOB column in index
991 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -808 335544602 table_view_err Only one table allowed for VIEWWITH CHECK OPTION -809 335544603 distinct_err DISTINCT, GROUP or HAVING not permitted for VIEWWITH CHECK OPTION -810 335544605 subquery_err No subqueries permitted for VIEWWITH CHECK OPTION -811 335544652 sing_select_err Multiple rows in singleton select -816 335544651 ext_readonly_ err Cannot insert because the file is readonly or is on a read only medium. -816 335544715 extfile_uns_op Operation not supported for EXTERNAL FILE table
992 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GD SC ODE SYMBOL TEXT OF ERROR MESSAGE -827 335544718 invalid_key Invalid key for find operation -828 335544678 inval_key_posn Invalid key position -829 335544616 field_ref_err Invalid column reference -829 336068816 dyn_char_fld_too_small New size specified for column
993 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 335544326 bad_dpb_form Unrecognized database parameter block -901 335544328 bad_segstr_handle Invalid BLOB handle -901 335544329 bad_segstr_id Invalid BLOB ID -901 335544330 bad_tpb_content Invalid parameter in transaction parameter block -901 335544331 bad_tpb_form Invalid format for transaction parameter block -901 335544332 bad_trans_handle Invalid transaction handle (expecting explicit transaction start) -901 335544337 excess_trans Attempt to start more than
994 ErrorCodes
Table X-1. Firebird 1.5. 0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 335544376 unres_rel Table
995 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 335544626 table_name TABLE
996 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 335544770 exception_array_bounds_ Array bounds exceeded. The exceeded code attempted to access an array element that is out of bounds. -901 335544771 exception_float_denormal_ Float denarmal operand. One operand ofthe floating-point operands is too small to represent a standard float value. -901 335544772 exception_float_divide_by_zero Floating-point divide by zero. The code attempted to divide a floating-point value by zero. -901 335544773 exception_float_inexact_result Floating-point inexact result. The result of a floating-point operation cannot be represented as a decimal fraction. -901 335544774 exception_float_invalid_operand Floating-point invalid operand. An indeterminant error occurred during a floating-point operation. -901 335544775 exception_float_overflow Floating-point overflow. The exponent of a floating-point operation is greater than the magnitude allowed. -901 335544776 exception_float_stack_check Floating-pointstack check. The stack overflowed or underflowed as the result of a floating-point operation. -901 335544777 exception_float_underflow Floating-point underflow. The exponent of a floating-point operation is less than the magnitude allowed. -901 335544778 exception_integer_divide_by_ Integer divide by zero. The zero code attempted to divide an integer value by an integer divisor of zero. -901 335544779 exception_integer_overflow Integer overflow. The result of an integer operation caused the most significant bit ofthe result to carry. -901 335544780 exception_unknown An exception occurred that does not have a description. Exception number %X. continued
997 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 335544781 exception_stack_overflow Stack overflow. The resource requirernents of the runtime stack have exceeded the rnernory available to it. -901 335544782 exception_sigsegv Segrnentation Fault. The code atternpted to access rnernory without privileges. -901 335544783 exception_sigill Illegal Instruction. The Code atternpted to perform an illegal operation. -901 335544784 exception_sigbus Bus Error. The Code caused a systern bus error. -901 335544785 exception_sigfpe Floating Point Error. The Code caused an Arithrnetic Exception or a floating point exception. -901 335544786 ext_file_delete Cannot delete rows frorn external files. -901 335544787 ext_file_rnodify Cannot update rows in external files. -901 335544788 adrn_task_denied Unable to perform operation. You rnust be either SYSDBA or owner of the database -901 335544794 cancelled Operation was cancelled -901 335544797 svcnouser User narne and password are required while attaching to the services rnanager -901 335544801 datype_notsup Data type not supported for arithrnetic -901 335544803 dialect_not_changed Database dialect not changed. -901 335544804 database_create_failed Unable to create database
998 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 335740930 gflx_invalid_sw Invalid switch
999 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 336068797 dyn_no_grant_admin_opt User
1000 ErrorCodes
TableX-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 336330766 gbak_db_exists Database
1001 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCOOE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 336330799 gbak_cant_rest_record Warning-record could not berestored -901 336330800 gbak_send_failed Gds_$send failed -901 336330801 gbak_no_tbl_narne No table name for data -901 336330802 gbak_unexp_eof Unexpected end offile on backup file -901 336330803 gbak_db_format_too_old Database format
1002 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 336331010 gbak_page_buffers_missing Page buffers parameter missing -901 336331011 gbak_page_buffers_wrong_param Expected page buffers, encountered "
1003 Appendix X
Table X-1. Firebird 1.5. 0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 336723986 gsec_no_usr_name No user name specified -901 336723987 gsec_err_add Add record error -901 336723988 gsec_ err_modify Modify record error -901 336723989 gsec_err_find_mod Find/modify record error -901 336723990 gsec_err_rec_not_found Record not found for user:
1004 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -901 336920578 gstat_retry Piease retry, giving a database name -901 336920579 gstat_wrong_ods Wrong ODS version, expected
1005 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -902 335544411 wrotpbver Wrong version of transaction parameter block -902 335544412 wroblrver Unsupported BLR version (expected
1006 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -902 335544724 net_event_connect_err Failed to establish a secondary connection for event processing. -902 335544725 net_event_listen_err Error while listening for an incoming event connection request. -902 335544726 net_read_err Error reading data from the connection. -902 335544727 net_write_err Error writing data to the connection. -902 335544732 unsupported_network_drive Access to databases on file servers is not supported. -902 335544733 io_create_err Error while trying to create file -902 335544734 io_open_err Error while trying to open file -902 335544735 io_close_err Error while trying to close file -902 335544736 io_read_err Error while trying to read fromfile -902 335544737 io_write_err Error while trying to write to file -902 335544738 io_delete_err Error while trying to delete flle -902 335544739 io_access_err Error while trying to access file -902 335544745 login_same_as_role_name Your login
1007 Appendix X
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERROR MESSAGE -902 335544831 conf_access_denied Access to
1008 ErrorCodes
Table X-1. Firebird 1.5.0 Error Codes (continued) SQLCODE GDSCODE SYMBOL TEXT OF ERKOR MESSAGE -904 335544829 exec_sqUnvalid_var Variable type (position
1009 APPENDIX XI Reserved Words
TABLE XI -1 CONTAINS KEYWORDS THAT are reserved in some way in Firebird. Some have special markings:
KEYWORD (con.) marks words that are reserved in their specific contexts. For example, the word UPDATING is a keyword in PSQL and will be disallowed as a variable or argument name.
[KEYWORD] marks words that are not currently reserved words but should be treated as such for planned future implementation or for compatibility with InterBase. I* KEYWORD *I marks words that are reserved words in Firebird l.O.x but were released in Firebird 1.5.
Table XI-1. Firebird Reserved Words [ABS] ACTION ACTIVE ADD ADMIN AFTER ALL ALTER AND ANY ARE AS ASC ASCENDING AT AUTO AUTODDL AVG BASED BASENAME BASE_NAME BEFORE BEG IN BETWEEN BIGINT BLOB BLOBEDIT [BOOLEAN] [BOTH] /*BREAK*/ BUFFER BY CACHE CASCADE CASE CAST CHAR CHARACTER [CHAR_LENGTH] [CHARACTER_LENGTH] CHECK CHECK_POINT_LEN CHECK_POINT_LENGTH CLOSE COALESCE (con.) COLLATE COLLATION COLUMN COMMIT COMMITTED COMPILETIME COMPUTED CONDITIONAL CONNECT CONSTRAINT CONTAINING CONTINUE COUNT CREATE CSTRING CURRENT CURRENT_CONNECTION CURRENT_DATE CURRENT_ROLE CURRENT_TIME CURRENT_TIMESTAMP
lOll Appendix XI
Table XI-1. Firebird Reserved Words (continued) CURRENT_TRANSACTION CURRENT_ USER DATABASE DATE DAY DB_KEY DEBUG DEC DECIMAL DECLARE DEFAULT [DEFERRED] DELETE DELETING (con.) DESC DESCENDING DESCRIBE !* DESCRIPTOR *I DISCONNECT DISPLAY DISTINCT DO DOMAIN DOUBLE DROP ECHO EDIT ELSE END ENTRY_POINT ES CAPE EVENT EXCEPTION EXECUTE EXISTS EXIT EXTERN EXTERNAL EXTRACT [FALSE] FETCH FILE FILTER !*FIRST *I FLOAT FOR FOREIGN POUND FREE_IT FROM FULL FUNCTION GDSCODE GENERATOR GEN_ID [GLOBAL] GOTO GRANT GROUP GROUP_COMMIT_WAIT GROUP _COMMIT_WAIT_TIME HAVING HEADING HELP HOUR IF /*IIF*/ IMMEDIATE IN INACTIVE INDEX INDICATOR INIT INNER INPUT INPUT_TYPE INSERT INSERTING (con.) INT INTEGER INTO IS ISOLATION ISQL JOIN KEY LAST (con.) LC_MESSAGES LC_TYPE [LEADING] LEAVE (con.) LEFT LENGTH LEV LEVEL LIKE LOCK (con.) LOGFILE LOG_BUFFER_SIZE LOG_BUF _SIZE LONG MANUAL MAX MAXIMUM MAXIMUM_ SEGMENT MAX_SEGMENT MERGE MESSAGE MIN MINIMUM MINUTE MODULE_NAME MONTH NAMES NATIONAL NATURAL NCHAR NO NOAUTO NOT
1012 Reserved Words
Table Xl-1. Firebird Reserved Words (continued) NULL NULLIF (con.) NULLS (con.) NUM_LOG_BUFS NUM_LOG_BUFFERS NUMERIC [OCTET_LENGTH] OF ON ONLY OPEN OPTION OR ORDER OUTER OUTPUT OUTPUT_TYPE OVERFLOW PAGE PAGELENGTH PAGES PAGE_SIZE PARAMETER PASSWORD [PER CENT] PLAN POSITION POST_EVENT PRECISION PREPARE [PRESERVE] PRIMARY PRMLEGES PROCEDURE PUBLIC QUIT RAW_PARTITIONS RDB$DB_KEY READ REAL RE CORD_VERSION RECREATE REFERENCES RELEASE RESERV RESERVING RESTRICT RETAIN RETURN RETURNING_VALUES RETURNS REVOKE RIGHT ROLE ROLLBACK ROW_COUNT [ROWS] RUNTIME SAVEPOINT SCHEMA SECOND SELECT SET SHADOW SHARED SHELL SHOW SINGULAR SIZE !* SKIP *I SMALLINT SNAPSHOT SOME SORT SQL SQLCODE SQLERROR SQLWARNING STABILITY STARTING STARTS STATEMENT (con.) STATIC STATISTICS SUB_TYPE I* SUBSTRING *I SUM SUSPEND TABLE [TEMPORARY] TERM TERMINATOR THEN [TIES] TIME TIMESTAMP TO [TRAILING] TRANSACTION TRANSLATE TRANSLATION TRIGGER [TRIM] [TRUE] TYPE UNCOMMITTED UNION UNIQUE [UNKNOWN] UPDATE UPDATING (con.) UPPER USER USING (con.) VALUE VALUES VARCHAR continued
1013 Appendix XI
Table XI-1. Firebird Reserved Words (continued) VARIABLE VARYING VERSION VIEW WAIT WEEKDAY WHEN WHENEVER WHERE WHILE WITH WORK WRITE YEAR YEARDAY
1014 APPENDIX XII Readings and Resources
FIREBIRD COMPRISES A HUGE COMMUNITY of helpers, experience, documentation, SOft• ware, news and other resources to assist you as a Firebird developer or administrator. This list represents some ofthe best-known resources but it is not exhaustive-new resources come online daily!
Recommended Reading
API Guide (APIGuide.pdf) and Embedded SQL Guide (EmbedSQL.pdf) for InterBase 6 and 7, published by Borland. These guides are available in printed form in the media kit, from the Borland Shop at http: I lwww. borland. com. The beta versions can be downloaded from numerous sites around the world-Google on the PDF document names. They are also available from the Downloads ~ InterBase page at http: I lwww. ibphoenix. com. Data Modeling Essentials: Analysis, Design and Innovation, 2nd Edition (Coriolis Group, 2000) by Graeme Simsion, revised and updated by Graham Witt and Graeme Simsion. This is the book for learning from the ground up about data analysis, relationships, normalization, and creative ways to solve tough design problems. This edition includes sections on UMLand an object-oriented approach, capturing patterns and a demo chapter on modeling for data ware• housing. The appendix includes a walk-through example for presenting a large datamodel. ]oe Celko's SQL For Smarties: Advanced SQL Programming (Morgan Kaufmann, 1999), by Joe Celko. This is a dassie book of magic spells for SQL programming, including one of the best discussions so far published on designing tree structures. ]oe Celko's Data and Databases: Concepts in Practice (Morgan Kaufmann, 1999), by Joe Celko. It is not a primer, but this book bridges the gap between theory and practice. ]oe Celko's SQL Puzzles andAnswers (Morgan Kaufmann, 1997), by Joe Celko. This book offers a hands-on approach to solving those syntax challenges. The Essence ofSQL: Guide to Learning Most ofSQL in the Least Amount ofTime (Coriolis Group, 1997) by David Rozenshtein and Tom Bondur (editor). This very concise book cuts out the mystique of SQL for the newbie. The Practical SQL Handbook: Using Structured Query Language, 3rd Edition (Addison-Wesley Professional, 1996) by Judith S. Bowman et al. This is a well• reviewed how-to and desktop reference for standard SQL.
1015 Appendix XII
A Guide to the SQL Standard, 4th Edition (Addison-Wesley Professional, 1997) by C.J. Date and Hugh Darwen. All the things you wanted to know-and much that you didn't know you didn't know-about SQL-92, by the RDBMS "gods." Understanding the New SQL: A Complete Guide (Morgan Kaufmann, 1993) by Jim Melton and Alan Simon. This book covers SQL-89 and SQL-92, and is a com• prehensive, good lookup reference for the beginner. Examples are consistent, although often impractical. The book includes some basic modeling theory. Mastering SQL (Sybex, 2000) by Martin Gruber. This updated and expanded new version of the author's Understanding SQL makes standard SQL reachable, even for the beginner, and helps solid skills to develop quickly.
Reference Websites
Firebird Project Sites
http: I I sourceforge. netlprojectslfirebird is the development site where you can access the CVS tree, access source kits and binaries, and browse and record bugs. http: I lwww. firebirdsql. arg, alias http: I lfirebird. sourceforge. net, is where you can find information and news on the project. All Firebird binaries can be accessed through this site, along with how-tos, FAQs, subscription pages, and details of forums and newsgroups. http: I lwww. firebirdsql. orglff lfoundation offers information and news about the FirebirdSQL Foundation Inc., the non-profit group that raises funds for proj• ect grants.
Resource Websites
http: I lwww. ibphoenix. com is an information and news center for users develop• ing with Firebird or any version of InterBase. It has an online KnowledgeBase, dozens of authoritative articles, contacts for commercial support and consulting, links to tools and projects, and a CD subscription service. http: I lwww. cvalde. net is guru Claudio Valderrama's "Unofficial InterBase Site," home of the InterBase webring and links to many other sites where people are doing interesting things with Firebird and tools development. This site contains an eclectic collection of articles, mended software, news links, and more. http: I lwww. volny. czliprenosil is Ivan Prenosil's site. This site provides a reposi• tory of Ivan's insightful articles and online tools, written and maintained by a Firebird guru.
1016 Readings and Resources
http: I lwww. interbase-wor ld. com is a site full of news, interviews, and practical articles in Russian and English, about Firebird and InterBase. It provides links to many other Firebird community sites in Russia and around the world. http: I lwww. ibphoenix. cz is a resource site for Czech users of Firebird and InterBase, maintained by Pavel Cisar, author of the first Czech book about Firebird and InterBase. The site offers links, downloads, and consultancy. http: I lfirebird-fr. eu. org is maintained by Philippe Makowski in French, and includes resources, articles, and news. http: I lwww. comunidade-firebird. org is an international Portuguese-language developer site, maintained for and by Portuguese-speaking developers and mem• bers of Communidade Firebird Ungua Portuguesa. It offers downloads, links, services, articles, and jobs. http: I lwww. firebase. com. br lfb is a Brazilian site in Portuguese, maintained by Carlos Cantu. The site contains news, articles galore, courseware, and software downloads. http: I ltech. firebird .gr .jp is the home ofthe Firebird Japanese Users Association. This site provides news, articles, links, and downloads. http: I lwww. fingerbird. de is a portal site containing links to Firebird sites, articles, downloads, resources, and more
Firebird Forums
Technical support: firebird-support@yahoogroups. com. This is the main support forum for database and application developers. It's the right place to take questions about SQL, installation, configuration, design, and quirks. It's the wrong place to go for questions about drivers and application development environments-these have their own forums. It's also the first place to raise a suspected bug for prelimi• nary discussion. Join at http: I lgroups. yahoo. comlcommunitylfirebird-support. The core developers' Iab: firebird-devel@lists. sourceforge. net. This list is for the engine workers and field testers. Members are usually happy to help with building from source code, but you are expected to search the list archive to dis• cover the "basics" for yourself. Supportquestions and "noise" are off-topic there. Bug discussions are welcome, provided you have an excellent bug description available, provide exact details of the Firebird version, operating system, and hardware, and have already visited the Bug Tracker at the project site to establish that it not already known. Join at https: I llists. sourceforge. netllistsllistinfol firebird-devel. QA testers' Iab: firebird-test@lists. sourceforge. net. This is a field and unit testers' forum. Testers and test designers are welcome to join this group. It does not handle any support questions. Join at https: I llists. sourceforge. netllistsl listinfolfirebird-test.
1017 Appendix XII
Java: firebird-java@yahoogroups. com. This is a developers' forum and user support for the JDBC/JCA drivers (see Appendix III). It's also the place to raise suspected bug issues for the Java drivers. Join up with this group at http:llgroups.yahoo.comlcommunitylfirebird-java.
NOTE Borland's InterClient and InterServer products are not maintained or developed in or for Firebird at all.
Firebird ODBC-JDBC driver project: firebird-odbc-devel@lists. sourceforge. net. This is a developer, tester, and users' forum for the Firebird ODBC-JDBC driver (see Appendix III) . Note that third-party ODBC drivers are-not supported in this Iist-see the proprietors' websites for support details. Join the Firebird ODBC Iist athttps:lllists.sourceforge.netllistsllistinfolfirebird-odbc-devel. .NET Provider: firebird-net-provider@lists. sourceforge. net. This is a developer and users' forum for the Firebird .NET Provider interface project (see Appendix III). Join the forum at https: I /lists. sourceforge. netllistsllistinfol firebird-net-provider. PUP: firebird-PHP@yahoogroups. com. This is a peer support forum for developers building Firebird applications with PHP (see Appendix III). Join athttp:llgroups.yahoo.comlcommunitylfirebird-php. Visual Basic: firebird-vb@yahoogroups. com. This is a peer support forum for developers usingVisual Basic to build front-ends. Join at http:llgroups.yahoo.comlcommunitylfirebird-vb. Converting from other DBMSs: ib-conversions@yahoogroups. com. This is where you go for tips and advice about converting databases to Firebird. General support questions arenot welcome-join firebird-support as weil. Join at http:llgroups.yahoo.comlcommunitylib-conversions. Architecture and design ofthe engine: firebird-architect@yahoogroups. com. Here's where the engine gurus hang out and discuss questions and proposals about enhancing the Firebird engine and its interfaces. Participants and lurkers are welcome but no support questions are permitted. Discussions are usually quite rarefied. Join at http: I lgroups. yahoo. coml communi tylfirebird-architect. About tools: firebird-tools@yahoogroups. com. This is a forum for people devel• oping tools and plug-ins for Firebird. Announcements occur regularly here and the tools developers are usually available to steer you to the right place for help. Join at http: I lgroups. yahoo . coml communi ty lfirebird-tools. Fora selection of tools available, see Appendix V.
1018 Readings and Resources
General community discussions: firebird-general@yahoogroups. com. No support questions are allowed, but just about anything else goes as long as it is related to Firebird in some way. Topics range far and wide, from logos, to fluffy toys, to deployment discussions, to interesting mentions of Firebird in the online press. Documentation: firebird-docs@lists. sourceforge. net. This is also a non• lurkers' list-a forum for people working on documentation or those who want to start. Again, support questions are unwelcome. If you are interested in getting involved with this XML project, join at https: I llists. sourceforge. net/listsl listinfolfirebird-docs. Website: firebird-websi te@lists. sourceforge. net. This isn't a support list for your web application projects. It's another non-lurkers' list-a forum for people working on the Firebird website or those who want to volunteer to help. News group interface: All of these lists are mirrored to a news server at news: I lnews. atkin. com. Anyone can read the list traffic through this interface, but you must be a subscribed member of the list community in order to post messages through your newsreader.
How to Become a Firebird Developer The Firebird Project has a permanently open door to good C++ programmers who want to contribute to new design and development. People get membership of the project not by promises but by deeds. The first thing to do is get a SourceForge "nick" and then join the firebird-devel and firebird-architect lists (see the preceding sec• tion for details). Find an existing or new project that interests you, discuss it, and submit code. The project is constantly interested to hear from serious test designers and testers, too. The FirebirdSQL Foundation has funds that can be made available to assist serious contributors to commit to works on the project.
1019 Glossary
TERM DEFINITION .fdbor.FDB By convention, the suffix used for a Firebird primary database file. It is no more than a convention: Firebird works with any other file suffix, or none at all.
.gdbor.GDB By convention, this is the flle extension traditionally used for InterBase databases. However, a Firebird database file can have any extension, or none at all. Many Firebird developers use .fdb instead, to distinguish their Firebird databases from their InterBase databases, or as part of a solution to a performance• crippling "safety feature" introduced by Microsoft Corporation into their Windows ME and XP operating systems, targeted at files having the .gdb extension.
Why"GDB"? lt is an artifact ofthe name ofthe companythat created the original InterBase, Groton Database Systems.
ADO An abbreviation for Active Data Objects, a high-level application-to-data source interface introduced by Microsoft in 1996. Earlier versions could access only relational databases with fixed columns and data types, but later versions could interface also with other DBMS models, filesystems, data flles, e-mail messages, tree structures, and heterogeneous data structures. aggregate (function) A function that returns a result derived from a calculation that aggregates (collects together) values from a set of rows that is grouped in some fashion by the syntax of the SQL statement.
For example, the internal function SUM() operates on a non-null numerical column toreturn the result of adding all of the values in that column together for all of the rows cited by a WHERE or GROUP BY dause. Outputthat is aggregated by a WHERE dause returns one row of output, whereas that aggregated by a GROUP BY dause potentially returnsmultiple rows. alerter (events) A term coined to represent a dient routine or dass that is capable of "listening" for specific database EVENTs generated from triggers or stored procedures running on the server.
ALl CE The internal name for the source code for the gflx utilities• a corruption of the words "all else."
1021 Glossary
alternative key A term used for a unique key that is not the primary key. A (alternate key) unique key is created by applying the UNIQUE constraint to a column or group of columns. A foreign key in a formal referential integrity relationship can link its HEFERENCES dause to an alternative key.
API An abbreviation for application programming interface. An API provides a set of formal structures through which application programs can communicate with functions internal to another software. The Firebird API surfaces such an interface as a dient library compiled specifically for each supported platform. The Firebird API structures are C structures, designed to be translatable to virtually any host application language. Translations can be found for Java, Pascal, Perl and, to some degree, PHP 4, Python, and others.
argument A value of a prescribed data type and size that is passed to a function or stored procedure to be operated upon. Stored procedures can be designed to both accept input arguments andreturn output arguments. For the returned values of functions (both internal and user defined) the term result is more commonly used than argument.
The terms parameter and argument are often used inter• changeably with regard to stored procedures, thanks to Borland's adoption of the term parameter in its Deiphi data access dasses to name the properties to which stored procedure arguments are assigned.
arrayslice A contiguous range of elements from a Firebird array is known as a slice. A slice can consist of any contiguous block of data from an array, from a single element of one dimension to the maximum number of elements of all defined dimensions.
atomicity In the context of transactions, atomicity refers to the character of the transaction mechanism that wraps a grouping of changes to rows in one or more tables to form a single unit of work that is either committed entirely or rolled back entirely. In the context of a key, a key is said to be atomic if its value has no meaning as data.
AutoCommit When a change is posted to the database, it will not become permanent until the transaction in which it was posted is committed by the dient application. If the dientrollsback the transaction instead of committing it, the posted changes will be cancelled.
Some dient development tools provide a mechanism by which posting any change to any table invokes a follow-up call to commit the transaction, without further action by the user. This mechanism is usually called AutoCommit, or some similar term. It is not a Firebird mechanism-Firebird never commits transactions started by dients.
1022 Glossary backup/restore Backup is an external process initiated by a user-usually (Firebird style) SYSDBA-to decompose a database into a collection of compressed disk structures comprising metadata and data, which are separated for storage. Restoreis another external process-also user-initiated-which completely reconstructs the original database from these stored elements. The backup process also performs a number of housecleaning tasks on a database whilst reading it for backing up; and a restored database will be completely free of "garbage". See also gbak.
BDE An abbreviation for Borland Database Engine. Originally designed as the database engine of Paradox, it was extended to provide a generic middleware connectivity layer between a variety of relational database engines and Borland application development tools for the Microsoft DOS and Windows platforms. The vendor-specific rules applicable to each RDBMS are encapsulated in a set of driver libraries known as SQL Links. The SQL Unks drivers are version specific.
By 2000, when Borland released the codebase from which Firebird 1.0 was developed, it had already deprecated the BDE in favor of more modern driver technologies. The last known version of the BDE (v.5.2) shipped with Borland Deiphi 6. An InterBase driver in this distribution only partly supports Firebird. binarytree A logical tree structure in which a node can subtend a maximum oftwo branches. Firebird indexes are formed in binary tree structures.
BLOß An acronym for binary Zarge object. This is a data item of unlimited size, in any format, that is streamed into the database byte by byte and stored without any format modification. Firebird allows BLOBs of different types to be classed by means of subtypes. Firebird's ancestor, InterBase, was the first relational database to support storage ofBLOBs. See also CLOB.
BLOß control structure AC language structure, declared in a UDF module as a typedef, through which a BLOB UDF accesses a BLOB. A BLOB UDF cannot refer to actual BLOB data, but is apointer to a BLOB control structure instead.
BLOßfilter A specialized UDF that transforms BLOB data from one subtype to another. Firebird includes a set of internal BLOB filters that it uses in the process of storing and retrieving metadata. One internal filter converts text data transparently between SUB_TYPE 0 (none) and SUB_TYPE 1 (text, sometimes referred to as "Memo").
1023 Glossary
BLR An abbreviation for binary language representation, an internal relationallanguage with a binary notation that is a super-set of the "human-readable" languages that can be used with Firebird, namely SQL and GDML. Firebird's DSQL interface to the server translates queries into BLR. The BLR versions of compiled triggers and stored procedures, check constraints, defaults, and views are stored in BLOBs. Some dient tools-for example, IB_SQL and the command-line tool isql-have facilities to inspect this BLR code. In isql, execute the command SET BLOB ALL and perform SELECT statements to get the appropriate BLR fields from the system tables.
butTer A block of memory for caching copies of pages read from the database. The term "buffer" is synonymaus with "cache page."
BURP Internal name for the gbak code-an acronym for backup [and] restore program.
cache When a page is read from disk it is copied into a block of memory known as the database cache or, simply, the cache. The cache consists of buffers, each the size of a database page, determined by the page_size parameter declared when the database is created.
The word "buffer" in this context means a block of memory exactly the same size as one database page. The cache size is configurable, as a number ofpages (or buffers). Hence, to calculate the size of the cache, multiply page_size by the number of cache pages (buffers).
cardinality (of a set) The number of rows in a physical or specified set. The cardinality ofa row refers to its position in the top-to-bottom order of the set.
case-insensitive index An index using a collation sequence in which lowercase characters are treated as though they were the same as their uppercase equivalents. Firebird 1.0 does not support case• insensitive indexes. A few case-insensitive collation sequences appeared from Firebird 1.5 onward.
cascading integrity Firebird provides the optional capability to prescribe specific constraints behaviors and restrictions in response to requests to update or delete rows in tables that are pointed to by the REFERENCES sub-clause of a FOREIGN KEY constraint. The CASCADE keyword causes changes performed on the "parent" row to tlow on to rows in tables having the FOREIGN KEY dependencies. ON DELETE CASCADE, for example, will cause dependent rows to be deleted when the parent is deleted.
casting A mechanism for converting output or variable values of one data type into another data type by means of an expression. Firebird SQL provides the CAST() function for use in both dynamic SQL (DSQL) and procedural SQL (PSQL) expressions.
1024 Glossary character set 1\vo super-sets ofprintable character images and control sequences are in general use today in software environments: ASCII and UNI CODE. ASCII characters, represented by 1 byte, have 256 possible variants, whereas UNICODE characters, represented by 2, 3, or 4 bytes, can accommodate tens of thousands of possibilities. Because databases need to avoid the prohibitive overhead of making available every possible printable and control character used for programming anywhere in the world, the super-sets are divided up into code pages, also known as code tables. Each code page defines a subset of required characters for a specific language or family of languages, mapping each character image to a number. The images and control sequences within each code page are referred to collectively as a character set. A character image might be mapped to different numbers in different characters sets.
Firebird supports adefault character set for a database and definition of an explicit character set for any character, character varying, or BLOB SUB_TYPE 1 (text BLOB) column. If no character set is defined for a database, its character set defaults to NONE, causing all character data to be stored exactly as presented, with no attempt to convert characters (transliteratel to any particular character set.
Classic architecture The original InterBase model, where aseparate server process is started for each dient connection. This architecture predates the Superserver model, which threads all dient processes from a single server process. Variants ofboth architectural models are available for many operating system platforms.
CLOB An acronym for character Zarge object. This term has crept into use recently, as other RDBMSs have mimicked Firebird's support for storing large objects in databases. A CLOB is equivalent to Firebird's BLOB SUB_TYPE 1 (TEXT). See also BLOß. coercing data types In the Firebird API's XSQLDA structures, converting a data item of one SQL type to another, compatible SQL type is known as data type coercion. coUation order Defines how a sort operation orders character columns in output sets, the pairing oflowercase and uppercase characters for the UPPER( ) function, and how characters in character columns are compared in searches. A collation order applies to a specific character set. If multiple collation orders are available for a particular character set, one collation order will be treated as the default. By convention, the default collation order has the same name as the character set.
1025 Glossary
column In SQL databases, data is stored in structures that can be retrieved as tables or, more correctly, sets. A set consists of one or more rows, each identical in the horizontal arrangement of distinctly defined items of data. One distinct item of data considered vertically for the length of the set is known as a column. Application developers often refer to columns as fields.
commit When applications post changes affecting rows in database tables, new versions of those rows are created in temporary storage blocks. Although the work is visible to the transaction in which it occurred, it cannot be seen by other users of the database. The dient program must instruct the server to commit the work in order for it to be made permanent. If a transaction is not committed, it must be rolled back in order to undo the work.
CommitRetaining A transaction setting that implements the COMMIT WITH RETAIN attribute of a transaction. Also known as a soft Commit. With this attribute, a transaction's context is kept active on the server until the dient application finally calls Commit (a hard Commit) and allows the transaction inventory management processes to pass it through for garbage collection. The wide• spread use of CommitRetaining in applications is a common cause of performance degradation. See also oldest interesting transaction (OIT).
concurrency Refers broadly to multiple users accessing the same data simultaneously. This term is also widely used in documentation and support lists to refer to the particular set of attributes that apply to a transaction: isolation Ievel, locking policy, and others. For example, someone may ask you, "What are your concurrency settings?" Even more specifically, the ward "concurrency" is sometimes used as a synonym for the SNAPSHOT isolation Ievel.
constraint Firebird makes many provisions for defining formal rules that are to be applied to data. Such formal rules are known as constraints. For example, a PRIMARY KEY is a constraint that marks a column or group of columns as a databasewide pointer to all of the other columns in the row defined by it. ACHECK constraint sets one or more rules to Iimit the values that a column can accept.
contention When two transactions attempt to update the same row of a table simultaneously, they are said to be in contention; they are contending (or competing).
correlated subquery A query specification can define output columns that are derived from expressions. A subquery is a special kind of expression that returns a single value that is itselfthe output of a SELECT statement. In a correlated subquery, the WHERE dause contains one or more search keys that are relationally linked to columns in the main query.
1026 Glossary crash A slang term for abnormal termination ofthe server or a dient application. crash recovery Processes or procedures that are implemented to restore the server and/ or dient applications into running condition following an abnormal termination of either the server or the application, or both. cvs An abbreviation for Concurrent Versions System, an open source program that allows developers to keep track of different development versions of source code. CVS is widely used for open source projects, induding the Firebird Project. cyclic links In a database context, an inter-table dependencywhere a foreign key in one table (TableA) refers to a unique key in another table (TableB) that contains a foreign key that points back, either directly or through a reference to another table, to a unique key in TableA. database In its broadest sense, the term "database" applies to any persistent file structure that stores data in some format that permits it to be retrieved and manipulated by applications.
DB_KEY See RDB$DB_KEY.
DDL An abbreviation for Data Definition Language, the subset of SQL that is used for defining and managing the structure of data objects. Any SQL statement starting with the keywords CREATE, ALTER, RECREATE, CREATE OR REPLACE, or DROP is a DDL statement. In Firebird, some DDL statements start with the keyword DECLARE, although not all DECLARE statements areDDL. deadlock When two transactions are in contention to update the same version of a row, the transactions are said to be in deadlock when one transaction (Tl), having a lock on row A, requests to update row B, which is locked by another transaction (T2), and T2 wants to update row A. Normally, genuine deadlocks are rare, because the server can detect most deadlocks and resolves them itselfwithout raising a deadlock exception. The Firebird server unfortunately generalizes alllock conflict exceptions into a single error code that reports a "deadlock," regardless of the actual source of the conflict. Client application code must resolve a lock conflict by having one transactionroll back in order to allow the other to commit its work. degree (ofaset) The number of columns in a tabular set. The degree ofa column refers to its position in the left-to-right sequence of columns, starting at 1. deployment The process of distributing and installing software components for production use.
1027 Glossary
dialect A term that distinguishes Firebird's native language set from an older language set that was implemented in Firebird's predecessor, InterBase 5. The older language set remains available to Firebird for near compatibility with legacy databases, as dialect 1. The native Firebird set is dialect 3.
DML An abbreviation for data manipulation language, the major subset of SQL statements, which perform operations on sets ofdata.
domain A Firebird SQL feature whereby you can assign an identifying name to a set of data characteristics and constraints (CREATE DOMAIN), and then use this name in lieu of a data type when defining columns in tables.
DPB An abbreviation for database parameter buffer, a character array defined by Firebird's API. It is used by applications to convey the parameters that specify the characteristics of a dient connection request, along with their specific item values, across the API.
DSQL An abbreviation for dynamic SQL, which refers to statements that an application submits in runtime, with or without parameters, as contrasted with "static SQL" statements, which are coded directly into special code blocks of a host language program and are subsequently preprocessed for compilation within embedded SQL applications. Applications that use Firebird API calls, either "raw" or through a dass library that encapsulates the Firebird API. are using DSQL.
DTP An abbreviation for desktop publishing, the activity ofusing computer methods to prepare documents for publication in print or on the Web.
DUDLEY Interna! name for the source code for the deprecated metadata utility gdef. The name derives from the abbreviation DDL.
dyn, also DYN A byte-encoded language for describing data definition statements. Firebird's DSQL subsystem parses DDL Statements and passes them to a component that outputs DYN for interpretation by the Y valve, another subsystem that is responsible for updating the system tables.
error A condition in which a requested SQL operation cannot be performed because something is wrong with the data supplied to a statement or procedure, or with the syntax of the statement itself. When Firebird encounters an error, it does not proceed with the request but returns an exception message to the dient application. See also exception.
errorcode An integer constant returned to the dient or to a calling procedure when Firebird encounters an error condition. See also error, exception.
1028 Glossary
ESQL An abbreviation for Embedded SQL, the subset of SQL provided for embedding static SQL in special blocks within a host application. event Implements Firebird's capability to pass a notification to a "listening" dient application if requested to do so by a POST_EVENT call in a trigger or stored procedure. exception The Firebird server's response to an error condition that occurs during a database operation. Several hundred exception conditions are realized as error codes, in a variety of categories, which are passed back to the dient in the Error Status Vector (Array). Exceptions arealso available to stored procedures and triggers, where they can be handled by a custom routine. Firebird supports user-defined exceptions as well. extemal function Firebird has but a few built-in, SQL-standard functions. To extend the range of functions available for use in expressions, the Firebird engine can access custom functions, written in a host language such as C/ C++ or Delphi, as if they were built in. Several free libraries of ready-made external functions (also known as user-defined functions, or UDFs) exist among the Firebird community, induding two that are induded with the Firebird binary release distributions. executablestored A stored procedure that is called using EXECUTE PROCEDURE procedure and does not return a multi-row result set. See also selectable stored procedure. execute In a dient application, execute is commonly used as a verb that means "perform my request" when a data manipulation statement or stored procedure call has been prepared by the dient application.
In DSQL, the phrase EXECUTE PROCEDURE is. used with a stored procedure identifier and its input arguments, to invoke executable stored procedures.
FIBPlus The trade name of the extended, commercial version of the older FreeiBComponents of Greg Deatz, data access components encapsulating the Firebird and InterBase APis, for use with Borland's Delphi, C++Builder, and Kylix products. foreignkey A formal constraint on a column or group of columns in one table that linksthat table to another table's corresponding primary or unique key. If the foreign key is non-unique and the table itself has a primary key, the table is capable of being the "many" side of a one-to-many relationship.
Firebird supports the dedaration of a formalforeign key constraint, which will enforce referential integrity automatically. When such a constraint is dedared, Firebird automatically creates a non-unique index on the column or columns to which the constraint applies and also records the dependencies between the tables that are linked by the constraint.
1029 Glossary
garbage collection A general term for the cleanup process that goes on in the database during normal use to remove obsolete back-versions of rows that have been updated. In Superserver, garbage collection runs as a background thread to the main server process. Garhage collection can also be performed by sweeping and by backing up the database.
gbak The command-line utility (found in the /bin directory ofyour Firebird installation) that backs up and restores databases. It is not a file-copy program; its backup operation decomposes the metadata and data and stores them separately, in a compressed binary format, in a filesystem file. By convention, backup flies are often given the filename suffix .gbk or .fbk. Restoring decompresses this flle and reconstructs the database as a new database flle, before feeding the data into the database objects and rebuilding the indexes.
Apart from normal data security tasks expected of a backup utility, gbak performs important roles in the regular mainte• nance of "database hygiene" and in the recovery of corrupted databases.
GDML An abbreviation for Groton Data Manipulation Language, a high-level relationallanguage similar to SQL. GDML was the original data manipulation language oflnterBase, functionally equivalent to DML in Firebird SQL but with some data definition capabilities. It is still supported through the interactive query utility qli.
gdef An older InterBase utility for creating and manipulating metadata. Since isql and the dynamic SQL interface can handle DDL, gdefis virtually redundant now. However, because it can output DYN language statements for several hast programming languages, including C and C++, Pascal, COBOL, ANSI COBOL, Fortran, BASIC, PLI, and ADA, it still has its uses in the development of embedded SQL applications.
generator A number-generating engine for producing unique numbers in series. The statement CREATE GENERATORgenerator_name seeds a distinct series of signed 64-bit integer numbers. SET GENERATOR TO n sets the first number in the series. The function GEN_ID (generator_name, m) causes a new number to be generated that is m higher than the last generated number.
gfix A collection of command-line utilities, including database repair tools oflimited capability. It includes tools to activate database shadows, to put the database into single-user (exclusive access) mode (shutdown), and to restore the database to multi-user access (restart). It can resolve limbo transactions left behind by multiple-database transactions, set the database cache, enable or disable forced (synchronous) writes to disk, perform sweeping and set the sweep interval, switch a Firebird database from read/write to read-only or vice versa, and set the database dialect.
1030 Glossary gpre In embedded database development, the preprocessor for static SQL language blocks in host language source code that translates them to BLR format in preparation for compiling. It can preprocess C, C++, COBOL, and Pascal and ADA host code, on selected platforms. grant/revoke SQL commands GRANT and REVOKE, which are used for setting up user privileges for accessing the objects in a database.
Groton Short for Groton Data Systems, the name ofthe original company that designed and developed the RDBMS that was named InterBase. From InterBase, eventually, evolved Firebird. 1\vo of the original Groton directors, Jim Starkey and Ann Harrison, are actively involved in aspects of Firebird development. gsec Firebird's command-line security utility for managing the server-level user/password database (security.fdb for v.l.S; isc4.gdb for v.l.O), which applies to all users and all databases. This utility cannot be used to create or modify roles, since roles exist within a database. gstat The command-line utilitywith which to gather statistics about a Firebird database. It analyzes the internallayout, such as the flll factor, header page, index pages, log page, and system relations. Table-by-table information about record versions (usually lengthy) can be optionally obtained, using the -r and -t tablename switches together. hierarchical database An old design concept for implementing table-to-table relationships in databases by building up tree structures of inherited indexes. host langnage A general term referring to the language in which application code is written. identity attribute Some RDBMSs (MSSQL, for example) support a table attribute that automatically implements a surrogate primary key integer column for a table and causes a new value to be generated automatically for each new row inserted. Firebird does not support this attribute directly. A similar mechanism can be achieved by explicitly defining an integer field of adequate size, creating a generator to populate it, and defining a Before Insert trigger that calls the GEN_ID() function to get the next value of the generator.
IBO An abbreviation for IB Objects, data access components and data-aware controls encapsulating the Firebird and InterBase APis, for use with Borland Delphi, C++ Builder, and Kylix products.
1031 Glossary
IBX An abbreviation for InterBaseXpress, data access components encapsulating tbe InterBase API, distributed by Borland for use with their Deiphi and C++Builder products.
index A specialized data structure, maintained by the Firebird engine, that provides a compact system of data pointers to the rows of a table.
INETerror In the firebird.log, marks an error received by the Firebird network layer from a TCP /IP dient/ server connection.
installation The procedure and process of copying software to a computer and configuring it for use.
InterBase A RDBMS that is the ancestor ofFirebird. Developed originally by a company named Groton Data Systems, it eventually passed into the ownership ofthe Borland Software Corporation. InterBaseversion 6 was released into open source in 2000 under the InterBase Public License. Firebird was developed by independent developers from this open source codebase and soon became a forked development.
InterClient An obsolete JDBC Type 2 Java dient for the original InterBase 6 open source server. In Firebird, it is superseded by JayBird, a family of open source JDBC/JCA-compliant Javadrivers (Type 4 andType2).
InterServer An obsolete, Java-driven server-based communication layer originally distributed witb tbe InterBase 6 open source code release. BothInterServer and its companion InterClient have been superseded in Firebird by JayBird, a more modern and open Java interface.
ISC, isc, etc. Error messages, some environment variables, and many identifiers in the Firebird API have the prefix "ISC" or "isc". As a matter of purely historical interest, these initials are derived from the initialletters of "InterBase Software Corporation," the name of a subsidiary company of Borland that existed during some periods ofBorland's ownership ofFirebird's ancestor, InterBase.
isolation Ievel This attribute of a transaction prescribes the way one transactionwill interact with other transactions accessing the same database, in terms of visibility and locking behavior. Firebird supports three levels of isolation: Read Committed, Repeatahle Read (also known as Snapshotor Concurrency), and Snapshot Table Stability (also known as Consistency). Although Read Committed is the default for most relational engines, Firebird's default level is Repeatabte Read, thanks to optimistic, row-levellocking. See also transaction isolation.
1032 Glossary isql The name ofFirebird's console-mode interactive query utility, which can connect to one database at a time. It has a powerful set of commands, including its own subset of Firebird SQL, in addition to the regular dynamic SQL command set. It has a large set of embedded macros for obtaining metadata information. isql can output batches of commands, including embedded comments, to a file, and it can "run'' such a file as a script-the recommended way to create and alter database objects.
JDBC An abbreviation for Java Database Connectivity, a set of standards for constructing drivers for connecting Java applications to SQL databases. join JOIN is the SQL keyword for specifying to the engine that the output ofthe SELECT statement involves merging columns from multiple tables, linked by matehing one or more pairs ofkeys. jrd The internal name of the Firebird database engine kernel. It is an abbreviation for ]im's Relational Database, an artifact ofthe original engine, invented by ]im Starkey, that became InterBase and, later, Firebird. key A constraint on a table that is applied to a column or group of columns in the table's row structure. A primary key or a unique key points to the unique row in which it exists, while a foreign key points to a unique row in another table by linking to its primary key or another unique key. kill (shadows) When a database shadow is created using the MANUAL keyword, and the shadow becomes unavailable, further attachments to the database are blocked. In order to re-enable attachments to the database, it is necessary to issue a -kill database command from the gfix utility to delete references to the shadow. leafbucket In a binary index tree, the data item in the last index on a node of the tree. The leaf buckets figure reported in gstat index statistics provides an approximate count of the number of rows in the table. limbo (transaction) A limbo transaction can occur where a transaction spans more than one database. Multi-database transactions are protected by two-phase commit, which guarantees that, unless the portions of the transaction residing in each database get committed, all portions will be rolled back. If one or more of the databases involved in the transaction becomes unavailable before the completion ofthe two-phase commit, the transaction remains unresolved and is said to be in limbo.
1033 Glossary
locking conflict Under Firebird's optimistic locking scheme, a row becomes locked against update from other transactions as soon as its transaction posts an update request for it. Where the isolation level of the transaction is SNAPSHOT TABLE STABILITY (also known as Consistency), the lock occurs as soon as the transaction reads the row. A locking conflict occurs when another transaction attempts to post its own update to that row. Locking conflicts have various causes, characteristics, and resolutions according to the specific settings of the transactions involved.
lock resolution As a general term, refers to the measures taken in application code to resolve the conditions that occur when other trans• actions attempt to update a row that is locked by a transaction because of an update request. As a specific term, lock resolution refers to the WAIT /NO WAIT parameter setting of a transaction that specifies how a transaction should react if a locking conflict arises.
metadata A generic quantity noun referring to the structure of all the objects that comprise a database. Because Firebird stores the definitions of its objects right inside the database, using its own native tables, data types, and triggers, the term "metadata" also refers to the data stored in these system tables.
multi-generational The term used for the engine mechanism of Firebird that architecture (MGA) enables optimistic row locking and a high level of transaction isolation, which protects a transaction's dynamic view of the database and its changes to rows in that view, without blocking other readers. It is achieved by the engine's capability to store multiple versions of rows concurrently and to "age" these versions with respect to the original view. See also versioning architecture.
natural (scan) Indicates that the associated table will be scanned in "natural order" (i.e., in no particular order and without reference to an index). This is seen sometimes in the query plans created by the optimizer.
non-standard SQL A term often heard with reference to RDBMs that have a low degree of conformance with the ISO language and syntax standards for SQL. See also standard SQL.
non-unique key A column or group of columns that can act as a pointer to a grouping of rows in a set. A foreign key constraint to implement a one-to-many relationship is typically formed by matehing a non-unique column or group in a "child" or "detail" set to a unique key in a "parent" or "master" set.
normalization A technique commonly used during the analysis of data preceding database design to abstract out repeating groups of data in multiple tables and eliminate the potential to duplicate the same "facts" in related tables.
1034 Glossary null Sometimes wrongly referred to as a "null value," the state of a data item that has no known value. Logically it is interpreted as unknown and is thus unable to be evaluated in expressions.
Null is never equivalent to zero, blank, or an empty (zero• length) string, and it does not represent either infinity or NaN. It represents the state of a data item that either has never been assigned a value or has been setNULL by an operation.
ODBC An abbreviation for Open Database Connectivity. It is a call• level interface standard that allows applications to access data in any database that has a driver supporting this standard. Several ODBC drivers are available that support Firebird, including an open source one developed for Firebird that is internally consistent with the JDBC standard.
ODS An abbreviation for on-disk structure. It is a number that refers to the version of the internal structure and Iayout of a Firebird or InterBase database. For IB4.0, it was 8; for IB4.2, it was 8.2; and for IB5.x, it was 9. Firebird 1 has ODS 10, and 1.5 has 10.1.
A database can be raised to a higher ODS by backing it up with the gbak -r[estore] -t[ransportable] option using the old version's gbak program, and restoring from that gbak flle using the new version's gbak.
OLAP An abbreviation for Online Analytical Processing, a technology that is applied to databases that have grown to such a volume that it is impracticable for them to be queried directly as the basis ofbusiness decisions. Typically, OLAP systems are designed to analyze and graph trends, identify and capture historical milestones or anomalies, manufacture projections and hypothetical scenarios, crunch large volumes of data for reports, and so on, in reasonable time.
OS An abbreviation for operating system. oldest active A statistic maintained by the Firebird engine, global to a transaction (OAT) database, the oldest transaction still in the database that has not been either committed or rolled back. oldestinteresting A statistic maintained by the Firebird engine, global to a transaction (OIT) database, the ID of the oldest transaction that has not been committed. It is sometimes the same transaction as the OAT but it may not be, since any transaction that is still active, has been rolled back, committed using COMMITWITH RETAIN ("CommitRetaining"), or left in limbo by a failed two-phase commit remains "interesting." When the OIT gets "stuck" at a much lower transaction ID than the newest transactions, garbage collection (cleanup of old record versions) cannot proceed and database operations slow down and, eventually, bang completely. The OIT can be retrieved as "oldest transaction'' using the -header switch of gstat command-line utility.
1035 Glossary
OLEDB An abbreviation for Object Linking and Embeddingfor Databases. OLE is a Microsoftstandard developed and promoted for incorporating binary objects of many diverse types (images, documents, etc.) into Windows applications, along with application-levellinking to the software engines that create and modify them. OLE DB was added in an attempt to provide developers with the means to supply a more vendor• specific support for database connectivity-especially relational databases-than can be achieved with "open'' standards such as ODBC. More recently, Microsoft layered the ADO technology on top of OLE DB.
OLTP An abbreviation for Online Transaction Processing, recognized as one ofthe essential requirements for a database engine. Broadly speaking, OLTP refers to support for clients performing operations that read, alter, or create data in real time.
optimization In general, refers to techniques for making the database and application software perform as responsively as possible. As a specific term, it is often applied to the techniques used by the Firebird engine to analyze SELECT statements and construct efficient plans for retrieving data. The routines in the Firebird engine that calculate these plans are known collectively as the Firebird optimizer.
page A Firebird database is made up offixed-sized blocks of disk space called pages. The Firebird engine allocates pages as it needs to. Once it stores data, a page could be any one of ten different types of pages, all of equal size-the size defined in the PAGE_SIZE attribute during database creation. The type of page the engine stores to disk depends on the type of data object being stored on the page: data, index, BLOB, etc.
page_size The size of each fixed block is determined by the page_size specified for the database when the database is created or restored. Chunks of cache memory are also allocated in page_size units.
parameter A widespread term in many Firebird contexts, it can refer to the values that are passed as arguments to and returned from stored procedures (input parameters, output parameters). The term can also refer to the data items that are passed to the function blocks ofthe FirebirdAPI (database parameter block, transaction parameter block, service parameter block) or to the attributes, as seen from an application, of a connection instance (connection parameters) or a transaction (transaction parameters).
In dient applications, placeholder tokens that are accepted for passing into WHERE clauses of SQL statements for substitution by constant values at runtime are often implemented as "parameters," hence the term "parameterized queries."
1036 Glossary
PHP An abbreviation for PHP: Hypertext Preprocessor, an open source embedded HTML scripting language used to create web applications, especially tbose witb database back-ends. It has good support for a number of network protocols and web programming environments. Its strengtblies in its compatibility witb many types of databases. Also, PHP can talk across networks using IMAP, SNMP, NNTP, POP3, or HTTP. PHP's originator, in 1994, was Rasmus Lerdorf. Since 1997, it has been in the hands of a large open source community. plan See query plan. platform A term loosely used to refer to the combination of hardware and operating system software, or operating system software alone, for example, "tbe Windows 2000 platform," "the Linux platform," "UNIX platforms." Cross-platform usually means "applicable to multiple platforms" or "portable to other platforms." prepare AnAPI function that is called before a query request is submitted for tbe first time, requesting validation of the statement, construction of a query plan, and several items of information about the data expected by tbe server. primarykey A table-level constraint that marks one column or a group of columns as tbe key tbat must identify each row as unique witbin tbe table. Altbough a table may have more than one unique key, only one of tbose keys may be tbe primary key. When you apply tbe PRIMARY KEY constraint to columns in a Firebird table, uniqueness is enforced by tbe automatic creation of a unique index that is, by default, ascending and named according to a convention.
PSQL An abbreviation for Procedural SQL, tbe subset of SQL extensions implemented for writing stored procedures and triggers. There are minor differences between tbe subsets of PSQL allowed for stored procedures and for triggers. qli The Query Language Interpreter, an interactive query dient tool for Firebird. It can process DDL and DML Statements in botb SQL and GDML, tbe pre-SQL query langnage ofFirebird's ancestor, InterBase 3. Altbough largely succeeded by isql and a number ofthird-party GUI tools, qli has some value for its capability to realize some engine features not so far implemented in Firebird SQL. Unlike its successor, isql, qli can connect to more tban one database at tbe sametime and can simulate multi-database joins. query A general term for any SQL request made to tbe server by a client application.
1037 Glossary
queryplan A strategy for the use of indexes and access methods for sorting and searching in queries. The Firebird optimizer always computes a plan for every SELECT query, including subqueries. It is possible to specify a custom plan using the PLAN clause syntax.
RDB$- A preflx seen in the identiflers of many system-created objects in Firebird. It's a relic from Relational DataBase, the name of an early relational database developed by DEC. The design of RDB was the precursor to Firebird's ancestor, InterBase.
RDB$DB_KEY The hidden, volatile, unique key that is calculated internally for every row in a table, from the physical address of the page on which the row starts and its offset from the beginning of the page. It is directly related to the cardinality of tables and sets and can change without trace or warning. It will always change when the database is restored from a backup. RDB$DB_KEY should never be treated as persistent. With care, it can be used dependablywithin an atomic operation to speed up certain operations in DSQL and PSQL dramatically.
RDBMS An abbreviation for relational database management system. Generically, it is a concept for storing data according to an abstract model that uses matehing keys to link a formal group of data to another formal group of data, thereby representing a relationship between the two groups.
Read Committed The least restrictive isolation Ievel for any Firebird transaction, Read Committed permits the transaction to update its view of the database to reflect work committed by other transactions since the transaction began. The isolation Ievels SNAPSHOT and SNAPSHOT TABLE STABILITY do not permit the original view to change.
redundancy A condition in a database where the same "fact" is stored in two unrelated places. ldeally, redundancy should be avoided by attention to normalization during analysis. However, there are circumstances where a certain amount of redundancy is justifled. For example, accounting transactions often contain data items that arguably could be derived by joining, looking up, or calculating from other structures. However, a legal requirement to store a permanent record that will not be altered if a database relationship's subsequently change would overrule the case for eliminating redundancy.
redundant indexes Redundantindexes often arise when existing databases are imported to Firebird from another RDBMS. When a PRIMARY KEY, UNIQUE, or FOREIGN KEY constraint is applied to a column or columns, Firebird automatically creates an index to enforce the constraint. In so doing, Firebird ignores any existing indexes that duplicate its automatic index. Having duplicate indexes on keys or any other columns can defeat the query optimizer, causing it to create plans that are inherently slow.
1038 Glossary referential integrity Generally, refers to the way an RDBMS implements mechanisms that formally support and protect the depend• encies between tables. Referential integrity support refers to the language and syntax elements available to provide these capabilities.
Firebird provides formal mechanisms for supporting referential integrity, including cascading constraints for foreign key relationships. lt is sometimes referred to as declarative referential integrity. relation In relational database theory, a self-contained body of data formally arranged in columns and rows. The term is almost interchangeable with "table," except that a relation cannot have duplicate rows, whereas a table can. In Firebird, the terminology persists in the names of some system tables (e.g., RDB$RELATIONS, which contains an entry for each table in the database). relationship An abstract term referring to the way relations (or tables) are linked to one another through matehing keys. For example, an Order Detail table is said to be in a dependency relationship or a foreign key relationship with an Order Header table. replication A systematic process whereby data is copied from one database to another on a regular basis, according to predictable rules, in order to bring two or more databases into a synchronized state. resulttable The set of rows output from a SQL SELECT query. More correctly, it is termed a resuZt set, synonymous with output set. roles A standard SQL mechanism for defining a set of permissions to use objects in a database. Once a role is created, permissions are assigned to it, using GRANT Statements, as if it were a user. The role is then GRANTed to individual users as if it were itself a privilege, thus simplifying the maintenance of user permissions in a database. rollback In general, the act or process of undoing all of the work that has been posted during the course of a transaction. As lang as a transaction has work pending that is posted but not committed, it remains unresolved and its effects are invisible to other transactions. If the dient application calls for a ROLLBACK, all ofthe posted work is cancelled and the changes are lost. Once a transaction is committed, its work cannot be rolled back. schema The formal description of a database, usually realized as a script or set of scripts, containing the SQL Statements defining each and every object in the database. The term "schema'' is often interchangeable with the term "metadata."
1039 Glossary
schema cache A mechanism whereby some descriptive elements of a database are stored on a client's local diskor in memory for quick reference at runtime, to avoid the need to constantly requery the database to obtain schema (metadata) attributes.
scrollable cursor A cursor is apointer to a row in a database table or output set. A cursor's position in the database is determined from the cardinality of the row to which it is currently pointing (i.e., its offset from the first row in the set). Repositioning the cursor requires returning the pointer to the frrst row in order to find the new position. A scrollable cursor is capable of locating itself at a specified new positionCupward or downward) relative to its current position.
selectivity of an index As a general term, refers to the spread of possible values for the index column throughout the table. The fewer the possible values, the lower the selectivity. Low selectivity can also occur where an index with a higher number of possible values is represented in actual data by a very high rate of duplication of a few values. Low selectivity is bad; high selectivity is good. A unique index has the highest possible selectivity.
selectable stored A stored procedure that is written using special PSQL syntax to procedure output a multi-row result set to the caller. It is called using a SELECT statement. See also executable stored procedure.
Services API An API to the functions of several of the Firebird command-line server utilities, providing a function-driven interface to backup, statistics, housekeeping, and other utilities. The Services API may be inapplicable to some Classic server versions.
sets In relational database terms, collections of data are managed in sets consisting of one or more rows made up of one or more columns of data, with each column containing one data item of a specific size and type. For example, a SELECT query specification or a view defines a set for output to a dient application or PSQL module, while an UPDATE query specification defines a set upon which the specified operation is to be performed.
shadowing/shadows An optional process available on a Firebird server, whereby an exact copy of a database is maintained, warts and all, in real time, on a separate hard disk on the same server machine where the database resides. The copy is known as a database shadow. The purpose is to provide a way for a database to quickly resume operation after physical darnage to the hard drive where the original database resides. A shadow is not a useful substitute for either replication or backup.
1040 Glossary
SMP An abbreviation for symmetric multiprocessing, a computer architecture that makes multiple CPUs available to a single operating system, to execute individual processes simultaneously. In theory, any idle processor can be assigned any task and, the more CPUs on the system, the better performance and load capacity.
Snapshot SNAPSHOT is one ofthe three transaction isolation Ievels supported by Firebird. It provides a stable view of the database that remains current to the user of the transaction throughout the life ofthat transaction. It is also known as concurrency Ievel isolation. See also Read Committed, Snapshot Table Stability.
Snapshot Table Stability SNAPSHOT TABLE STABILITY is the most protective of the three transaction isolation Ievels supported by Firebird. It enforces a consistent view of the database for the user of the transaction, by preventing any other transaction from updating any row it has selected, even if the transaction has not yet posted any change. It is also known as consistency-level isolation. See also Read Committed, Snapshot.
SQL A query language designed to extract meaningful sets of data from a relational database. lts correct pronunciation is "ess• cue-ell," not "sequel," as some people believe. ("Sequel" was the name of another query language.) It is also not an abbreviation for Structured Query Language. standard SQL, Refers to the syntax and implementation of SQL language SQL Standard elements as published by the International Organization for Standardization (ISO). This very complex standard prescribes definitions across an exhaustive range of syntax and functionality, at a number oflevels. stored procedure A compiled module of code stored in the database for invocation by applications and by other server-based code modules (triggers, other procedures). It is defined to the database in a source language-procedural SQL, or PSQL• consisting of regular SQL statements as weil as special SQL language extensions which supply structure, Iooping, conditionallogic, local variables, input and output arguments, exception handling, and more. subquery A query specification can define output columns that are derived from expressions. A subquery is a special kind of expression that returns a result that is itself the output of a SELECT statement. Also known as a sub-select or embedded query. sub-select, subselect A sub-selected column is one that is specified or output from a subquery. Such columns are not updatable. See also subquery.
1041 Glossary
Superserver architecture Superserver is the name given to the process-threading multi• user model, to distinguish it from the original InterBase model that instantiates one server process for each dient connection. The original model is now referred to as Classic server.
surrogate key In defining a unique key (e.g., a primary key), it may occur that no column or combination of columns can be guaranteed to provide a unique identifier for each and every row. In that case, a column can be added and populated by values that are certain to be unique. Such a key is known as a surrogate key.
In Firebird, surrogate keys are most commonly implemented using generators. Surrogate keys are also frequently used as a matter of good design principle, to conform with rules of atomicity. See also atomicity.
sweeping The process that collects and frees obsolete versions of each record in a database when a threshold nurober is reached. This number, which defaults to 20,000 and is known as the sweep interval, is calculated on the difference between the OIT and the newest transaction. Automatie sweeping can be disabled by setting a sweep interval of zero. A manual sweep can be invoked ad hoc, using the gfix utility. Sweeping is not a feature ofRDBMSs that do notstoreobsolete record versions.
SYSDBA An abbreviation for system database administrator, a person with responsibility for administering databases.
system tables Because relational database engines are self-contained, all ofthe metadata, or schema (data that describes the structure and attributes of database objects), is maintained within the database, in a suite of tables that is created by the CREATE DATABASE command. These tables, which store "data about data," are known as system tables. Firebird system tables all have identifiers that begin with the prefix RDB$ and actually indude data about themselves, as weH as every other object in the database.
table A term borrowed from desktop database technology, depicting a logical structure that stores sets of data in a tabulated forrnat, as records (rows) of fields, each record being, by definition, identical from left to right in the nurober and relative placement of fields and their data types and sizes. In reality, Firebird does not store data in a physically tabulated form at all, but in contiguous blocks of disk space known as pages.
transaction A logical unit of work, which can involve one or many statements or executions of statements. A transaction begins when the dient application starts it and ends when it either commits the transaction or rolls it back. A transaction is an atomic action-a commit must be able to commit every piece of pending work, otherwise all of its work is abandoned. A rollback, similarly, will cancel every piece of pending work that was posted since the start of the transaction.
1042 Glossary transaction Isolation A mechanism by which each transaction is provided with an environment that makes it appear (to itself) that it is running alone in the database. When multiple transactions are running concurrently, the effects of all of the other transactions are invisible to each transaction, from when it starts until it is committed. Firebird supports not just one but three levels of isolation, including one level that can see the effects of other transactions as they are committed. See Read Committed, Snapshot, Snapshot Table Stability. transitively dependent A constraint or condition where one table (C) is dependent on another table (A), because table Cis dependent on another table (B), which is dependent on A. Such a dependency would arise, for example, if table B had a foreign key referencing table Xs primary key, and table C had a foreign key referencing table B's primary key. The term is also used in data modeling to refer to a condition where, during normalization, an attributein one entity has a partial (but incomplete) dependency on a unique attribute set in another entity. trigger A module of compiled codebetonging to a table that performs an action when a DML event happens to a row in that table. Any nurober of event actions can be coded to occur in a prescribed sequence, before and/or after an insert, update, or delete operation on a table's row, with virtually the full range of procedural SQL (PSQL) being available. tuple In relational database terminology, the "strictly correct" name for a row in a table, or a group of columns that is a subset of a row. Purists would say that row is the SQL name for a tuple.
UDF An abbreviation for user-defined function, more correctly named external function. See also external function. unbalanced index Firebird indexes are maintained as binary tree structures. These structures are said to be unbalanced when new nodes are added continually in a manner that causes major branching on one "side" of the binary tree. Typically, this will occur when a process inserts hundreds of thousands of new rows inside a single transaction. Forthis reason, it is recommended that indexes be deactivated during massive inserts. Subsequent re-activation will rebuild fully balanced indexes. uninstallation An ugly, back-formed word, confusing to non-English speakers, since it is not found in any self-respecting dictionary-yet! Its approximate meaning is "a process that is the reverse of installation" (i.e., removing a previously installed software product from a computer system).
1043 Glossary
union A dause in a SELECT query specification that enables the output rows oftwo or more SELECT statementstobe combined into one final output set, as lang as each of the UNIONed sets matches all of the others by the degree, data type, and size of its output columns. The sets may be selected from different tables.
updatable view A view is said tobe updatable ifit is constructed from a regular query on a single table and all ofits columns exist in the underlying table. Same non-updatable views can be made updatable by the creation of triggers. See also view.
validation A mechanism whereby new data applied to a column in a table is checked by some means to determine whether it fits a required format, value, or range ofvalues. Two ways to implement validation in the database are CHECK constraints and triggers. ACHECK constraint will throw an exception if the input data falls to test true against the given expression or constant. With triggers, the new.value can be tested more thoroughly and, if it falls, can be passed to a custom exception.
versioning architecture Also known as multi-generational architecture (MGA), the feature, untll recently unique to Firebird and InterBase, of storing a new version of a changed row, or an inserted row on disk for the duration of a transaction, where it remains visible to that transaction even though it is not yet committed to the database. When the commit occurs, the new version becomes permanent in the database and the old version is flagged as obsolete. When considering contenders for a concurrent update in a conflict situation, the engine also uses attributes of the pending record versions concerned to determine precedence, ifany.
view A standard SQL object that is a stored query specification that can behave in many ways like a physical table. A view does not provide physical storage for user data-it acts as a predefined container for a set of output data that exist in one or more tables.
WNETerror In the firebird.log, marks an error received by the Firebird network layer from a Windows Named Pipes (Windows net• working) dient/ server connection.
XSQLDA An abbreviation for eXtended SQL Descriptor Area. It is a hast• language data structure in the API that is used to transport data between a dient application and the server's dynamic SQL parser module. XSQLDAs come in two types: input descriptors and output descriptors.
XSQLVAR A structure for defining sqlvar, an important field in the XSQLDA structure that is used for passing and returning input and output parameters.
1044 Glossary
Yvalve The name given to the Firebird subsystem that determines which ofFirebird's several "internal engines" should be used when attaching to a database. For example, one decision is whether to attach locally or as a remote dient, and another is to determine whether the attachment is being attempted to a database with a compatible ODS.
1045 Index
See the "Glossary" for a comprehensive Iist installation kits, 8 of terms used in this book. ' (apostrophe) character, doubling, 162 " (double-quotes) Symbols advisory about using to delimit strings, 162 - (hyphen), using with gsec command and case sensitivity, 595 switches, 704 using with delimited identifiers, - (subtraction) operator, precedence of, 218-219 394 ; (semicolon) != comparison, advisory about, 128 including in DDL scripts, 223-224 !>, ->, "> (not greater than) operators, terminating statements with, 573-574 precedence of, 395 as terminator character, 783 # (comment), usingwith unused using for internal Statements, 575 parameters, 742 using with SQL commands, 70 0 (parentheses) in expressions, ' (single quotes), using with dialect 3 description of, 392 databases, 234 • (multiplication) operator, precedence of, 394 , (commas), separating columns with 263 Numbers I (division) operator, precedence of, 394 2PC (two-phase commit), implementation I (forward slash) of, 551 significance of, 35 64-bit 1/0, relationship to naming using with Windows connection conventions for strings, 40 usingwith U.S. MM/DDICCYYformat, A 147 : (colon) -aswitch as prefix for variables, 610 for isql, 808, 811 using with ANY_SALES variable, for Lock Print reports, 859 608-609 a[dd] command in gsec, example of, 703 using with variables, 583 absolute disklfilesystem path using with Windows connection examples of, 36 strings, 40 format of, 34 ? command in gsec, example of, 704 -ac[tivate] shadow-file switch in gfix, II (concatenation operator) purpose of, 850 example of, 162, 393 access and security defaults, overview of, in expressions, 392 713-715 precedence of, 393 access control, relationship to database + (addition) operator, precedence of, 394 aliasing, 66-67 < (less than) operator, precedence of, 395 access management, setting for system <= (less than or equal to) operator, tables, 714 precedence of, 395 access modes changing with gfix, 843 <>, !=, -=, "= (not equal to) operators, precedence of, 395 types of, 525 <> comparison, advisory about, 128 account names on LinuxiUNIX, = assignment symbol, using with UPDATE accessibility of, 723 Statements, 406 ACCOUNT table, using update triggers = (equal to) operator, precedence of, 395 with,642-643 > (greater than) operator, precedence of, ACID properties of transactions, overview 395 of, 506-507 >= (greater than or equal to) operator, ACLs (access controllists), storing and precedence of, 395 tracking, 975
1047 Index
Acquire blocks entry in lock header block, Alive I Dead entry in owner blocks, explanation of, 864 explanation of, 867 Acquires entry in lock header block, ALL keyword, role in packaging privileges, explanation of, 864 715 action triggers. See also BEFORE INSERT All Linuxen Operating system, triggers; custom triggers; triggers requirements for, 6 customizing, 303-304 ALL() predicate, overview of, 400, 402-403 varying integrity rules with, 301-303 ALL privilege actions, storing for referential constraints, access granted by, 715 971 effect of, 722 Active owner entry in lock header block, ALL set quantifier, using with SELECT explanation of, 862 statements, 359 ACTIVE trigger status, explanation of, 645 -all switch, using with gstat, 331 ADD clauses, usingwith columns, 291-292 ALTER COLUMN clause, example of, ADD CONSTRAlNT clause, example of, 121-122 292-293 ALTER DATABASE statements, using with add interactive command in gsec, effect multi-flle databases, 239-240 of, 701 ALTER DOMAIN clause, example of, ADD_EMP _PROJ procedure, calling, 611 121-122,201-202 addition (+) operator, precedence of, 394 ALTER EXCEPTION statement, example of, addition, performing on fiXed types, 138 666 admin tools, accessing listings of, 21 ALTER INDEX statements, using, 324-325 ADO/BDE/ODBC sources, pumping and ALTER PROCEDURE Statements, changing migrating data from, 941 stored procedures with, 629-630 ADODB classes, website for, 930-931 ALTER TABLE Statements Advanced Data Generator tool, features of, alternative to, 293-294 941 effect of, 287 affinity mask value, calculating, 747 preparing for use of, 287 AFTER * triggers syntax for, 288 descriptions of, 641-642 ALTER TRIGGER Statement, example of, significance of, 645 287,661-663 aggregate functions ANDkeyword COUNT() as, 477-479 purpose of, 398 with embedded subqueries, 481-482 using with multi-column key linkages, at mixed grouping Ievels, 482 435 nesting, 483 ANY() predicate, overview of, 403 overview of, 423-424 any_lock_mem_size lock configuration selecting from procedures, 620-621 setting, description of, 879 aggregating expressions any_lock_sem_count lock configuration examples of, 475 setting, description of, 880 and grouping items, 476-477 ANY_SALES variable, using with aggregation, logic of, 4 74 DELETE_EMPLOYEE executable aliased databased paths, connecting by procedure,608-609 means of, 66-67 ANY exception, advisory about, 670 aliases. See also database path aliases; ANY predicator, purpose of, 400 table aliases Apache Web Server, web address for, 930 advisory about using in scripts, 226 API (application programming interface) customizing for character sets, 179-180 synchronous listening by means of, 683 storing, 168-170 and transactions, 536 using with character sets, 168 API functions aliases.conf file categories of, 98 default location for, 22, 24 starting transactions with, 538-540 Iayout of, 66 apostrophe (') character, doubling, 162 location of, 65 applets, obtaining in different languages, aliasing 17 and access control, 66-67 application development keeping in query specification, 458 of dynamic dient/ server applications, overview of, 64-67 97 portability of, 65-66 embedded Firebird applications, relationship to Embedded Server, 759 99-100
1048 Index
and Firebird core API, 98-99 resolving as true and false, 405 overview of, 97 assignment statements, using with and Services API, 101 variables, 583-584 application elements of events, list of, 680 AST entry for request blocks, explanation application tray icon, displaying, 62 of, 875 applications AST function, relationship to events and interaction with transactions, 542 asynchronaus listening, 683 multi-database applications, 92-93 asynchronaus listening, relationship to running on Embedded Server, 758-760 events, 683-684 using TIDs in, 541 asynchronaus signaling, relationship to Argument entry for request blocks, events, 682-683 explanation of, 876 -at[tach] switch in gfix, purpose of, 850 arguments atomicity assigning, 584 of PRIMARY KEY columns, 27 4-275 for gbak -b[ackup], 818 significance of, 214, 506, 508 for gbak restores, 823 ''Attempt to write to a read-only database" storing attributes of, 966 error, throwing, 246 arithmetic operators. See also SQL attributes operators for columns, 263-267 in expressions, 391 storing for arguments, 966 and number types, 128 for triggers, 645 precedence of, 393, 394 ''An Auditahle Series of Numbers" Tech array column dimensions, storing Info sheet, accessing, 132 information about, 961 authentication ARRAY columns failure in isql, 782-783 inserting into, 371-372 in Firebird l.O.x and 1.5, 707 storing, 189 USERS table used for, 706 updating, 378 vulnerability of, 706 array data, accessing, 189-190 AUTO mode, using with shadows, 250-252 array descriptor, example of, 189-190 autocommit mode, using with DDL array dimensions, specifying sub-script statements, 784 ranges for, 188 autodial, disabling on Windows, 921 array elements in expressions, description autoincrement type, advisory about, 130 of, 391 auto-incrementing keys, using with array slices triggers, 647-648 explanation of, 186 automatic fields, using INSERT statements getting limited read access to, 190 with,372-374 ARRAYtypes automatic indexes, characteristics of, 316 defining, 187 automatic Internet dialup on Windows, multi-dimensional arrays, 187-188 troubleshooting, 920-921 and SQL, 186 automatic sweeping, disabling, 838 using, 187 auto-stamping, using triggers for, 651-652 viewing through stored procedures, auto-undo log, using with transactions, 627-629 540 ASkeyword AVGO function in expressions, 391 description of, 423 significance of, 573 purpose of, 418 ASC constraint indexes, significance of, 276,316 B ASC[ENDING] keyword, usingwith CREATE INDEX statements, 322 -b[ackup_database] switch for gbak ASCII special character set, qualities of, backups, effect of, 818 174 -b[uffers] n switch in gfix, purpose of, 850 ASCII_CHARO external function, -b[uffers] restore switch in gbak, effect of, significance of, 283, 287 823 AsciiChar() function, declaring, 162-163 -b[uffers] switch in gfix, example of, 842 aspxDelphi.net PORTAL & STORE, web backup files, placing in directories with address for, 926 restricted access, 822 assertions backup rights in gbak, significance of, 816 relationship to predicates, 389-390 backup switches gbak, overview of, 818-819
1049 Index
backup tools BlazeTop graphical admin desktop, DBak, 939-940 features of, 938 gbak BackupRunner, 940 BLOß colurnns Time to Backup, 940 defining, 183-184 backups. See also gbak command-line inserting into, 371-372 tool; remote backups string input to, 185 advisory about cross-version backups, targeting with expressions, 415 820 testing for NULL/NOT NULL, 185 advisory about performance of, 287 updating, 377 example of, 829 BLOß control structure importance of, 813 creating, 767 ofmetadata, 821 fields in, 768 ofmulti-flle databases to multiple flles, BLOß filters 820-821 declaring, 770 multiple-volume to single-volume features of, 769-770 databases, 826 invoking, 770-771 performing garbage collection during, purpose of, 182, 761 255-256 storing and keeping track of protecting, 690 information about, 965 restoring to running databases, 258 tools for writing of, 771 running with gbak, 817-822 writing, 770 security considerations for, 822 BLOß functions versusshadowing,248 declaring, 768 to single flles, 820 summary of, 905-909 of single-flle databases to multiple writing, 767-768 targets, 821 BLOß parameters, accepting in UDFs, 764 single-volume to multiple-volume BLOß segments, overview of, 183-184 databases, 826 BLOß storage, advisory about, 181 transportable backups, 819-820 BLOß sub-types, significance of, 182-183 Bad IP address message, triggering, 43 BLOßtypes batch inserts, sample Statement for, 382 advisory about use of collation batch operations, overview of, 380-381 sequences with, 266 batches support for, 181-183 partitioning, 383 using, 185-186 preventing slowdown on, 382 BLOB variables, declaring in PSQL BDB Descriptor resource lock, overview of, modules, 183-184 872 BLOBDUMP isql command, effect of, 789 BDE/ADO/ODBC sources, pumping and BLOBs (binary large objects) migrating data from, 941 versus character types, 185-186 BEFORE DELETE trigger, example of, Iimits on, 949 654-655 operations on, 184-185 BEFORE INSERT OR UPDATE trigger, purpose of, 181 example of, 651 security considerations, 186 BEFORE INSERT triggers, using, 373-374, BLOBVIEW isql command, effect of, 789 64 7. See also action triggers; triggers block comments, including in DDL scripts, descriptions of, 641-642 222 exceptions in, 674-675 blocking mode, using with transactions, significance of, 645 525-529 BEGIN ... END blocks, using, 577, Blocks entry 579-580,604-605 in lock header block, 863 BETWEEN .. AND .. comparison in owner blocks, 867 predicator, purpose of, 396 BLR (binary language representation), BIGINT number type significance of, 454 limits of, 127-130 body elements minimum length for character type of, in stored procedures, 603-606 121 using with procedures and triggers, 576 binary collation BOOK_GROUP domain, setting default determination ascension of, 395 value for, 202 explanation of, 176 Boolean context variables, using with binary index tree, diagram of, 328 triggers, 646
1050 Index
Boolean data type, advisory about, 114 in dialect conversions, 157 BOOLEAN domains, defining, 200-201. See uses for, 155-157 also domains using with complex expressions, 155 Boolean evaluation CC date literal, description of, 145 shortcut used with predicates, 390 CD-ROM, advisory about running Firebird significance of, 399 servers from, 4 Borland C++Builder, Delphi, and Kylix CHARtypes components, features of, 927-930 casting to from DATE/TIME types, Brazilian users, website for, 1017 153-154 buffers using with external flies, 283 explanation of, 91, 211 character and string functions, summary storing information about, 969 of, 898-904 character repertoire, explanation of, 168 c CHARACTER SET attribute significance of, 161 -c switch for Lock Print reports, using with columns, 266 description of, 859 character sets. See also custom character -c[ache] n switch in gfix, purpose of, 850 sets -c[ache] switch aliases for, 168 in gfix, 842-843 characteristics of, 165-166 in isql, 808 dient character set, 166--167 -c[ommit] {ID 1 all} switch in gfix, purpose for dient connections, 17 4 of, 851 default collation sequence for, 395 -c[reate_database] restore switch in gbak, defaults for, 236 effect of, 823 defaults for databases, 170 C++ dient interface dass library, for Firebird 1.5.0, 951-955 obtaining, 926--927 and indexes, 315-316 C++Builder, Delphi, and Kylix for Microsoft Windows, 175 components, features of, 927-930 naming, 168 cache buffers overrides at field Ievel, 170-171 managing, 242 overrides at statement Ievel, 171-172 requirements for, 241 overrides for, 167 cache configuration, example of, 85. See special character sets, 17 4-175 also database cache specifying non-binary collations for, 178 cache modifications, advisory about, 244 storing, 168-170 CACHE n argument, example of, 244 storing keys for, 957-958 cache size support for, 167-173 calculating, 241-243 using OCTETS with, 173 changing default for, 842 character types. See also data types; estimating requirement for, 242-243 nurober types setting at database Ievel, 243-244 versus BLOBs, 185-186 verifying, 245-246 limitations with, 163 calculations, using NULL in, 404-405 support for, 161 calling conventions, using with UDFs, 765 using with UDFs, 764 cardinality, relationship to sets of data, 354 CHARACTER VARYING() type, explanation CASEO functions, using with expressions, of, 165 409-413 CHARACTER(n) fixed-length character CASE logic, Iack of support in PSQL, 581 type, explanation of, 164 case sensitivity, significance in module characters, limitations for object development, 595-596 identifiers, 698 CAST() function CHAR(n) fixed-length character type, in expressions, 392 explanation of, 164 using, 418-419 CHARSET I CHARACTER SET attribute, using EXTRACTO function with, 158 using with domains, 198 using in WHERE dauses, 156 CHECK conditions using with DATE/TIME types, 1~3-1~7 occurrence of, 137 using with implicit type convers10n m using with domains, 196--197 dialect 3, 119-120 CHECK constraints casting cross-referencing names and triggers between date/time types and other for, 958 types, 155-157
1051 Index
dependencies in, 197 dient/ server applications, developing, 97 dropping, 291 dient/server database systems ensuring storage of good data with, 650 abstraction of stored data in, 80--84 restrictions for use of, 278-279 characteristics of, 75 syntax of, 279 and data protection, 77 using, 277-279 designing for, 79--84 using with domains, 195-197 distribution of functions in, 77-79 CHECK expressions, using in DDL, 417 interoperability of, 77 CHECK_CONSTRAINTS system view, scalability of, 76 example of, 978 standardization of, 79 child and parent, dedaring relationship dient/server process, interaction with between,300-301 TSB,516 child structure, role in implementing dient/server versus flle-served databases, referential constraints, 300 76 CHILD table, implementing entity• -co[nvert] switch for gbak backups, effect relationship model on, 299 of, 818 circular references, managing in many-to• COALESCEO functions, using with many relationships, 308-309 expressions, 411--413 Classic server. See also POSIX Classic code, managing, 596--597 Server COLLATE attribute, using with domains, configuration of inetd and xinetd 198 daemon on Linux/UNIX, 38-39 COLLATE dause default cache allocation for, 241 in expressions, 392 effect of stored procedures on, 571 using with columns, 266--267 executable and processes in, 739-740 using with UPDATE statements, 376 and Guardian, 63 COLLATE sub-dause of GROUP BY, initializing and restarting manually, significance of, 480 62-64 collation sequences listing processes with, 14 for columns, 176 local access method in, 741 in GROUP BY dauses, 177 lock management in, 740-741 and index size, 178 Lock Manager in, 856 listing, 176 memory used by, 85 naming, 176 pointervariables with, 766 purpose of, 166, 175 reasons for problems with attaching to, in sort criteria, 177 38-39 for string comparisons, 177 resource use in, 741 collation sequences for character sets stopping, 64 in Firebird 1.5.0, 951-955 versus Superserver architecture, significance of, 395 739-741 storing definitions of, 959 troubleshooting, 917 colon (:) using with Linux/UNIX, 58-59 as prefix for variables, 610 dient and server versions, advisory about using with ANY_SALES variable, mixing of, 96 608-609 dient character set, overview of, 166--167 using with variables, 583 dient connections, character sets for, 17 4 using with Windows connection dient installation strings, 40 on Linux/UNIX, 102-103 COLORS lookup, example of, 305 overview of, 101 column aliases dient libraries. See also Firebird dient significance of, 362 library using with derived fields, 407--408 disk space requirement for, 4 column defaults, advisory related to installing for Windows kits, 12-13 UPDATE statements, 378 names and locations of, 109-110 column definitions purpose of, 95 changing in dialects, 121 dient memory consumption, relationship induding PRIMARY KEY constraints in, to character types, 163 275 dient role, relationship to transactions, using domains in, 198-200 507 column names dients. See Firebird dients in expressions, 391
1052 Index
specifying for views, 489-490 /*comment-text*/ Statement, description storing definitions of, 961-964 of, 577 substituting degree numbers for, 472 COMMIT statements columndef parameter of CREATE TABLE role in MGA, 509 statement, explanation of, 281 using RETAIN option with, 546--547 columns using with transactions, 546 adding to tables, 291-292 COMMITWITH RETAIN statements, advisory about calculating averages on, significance of, 513 · 476 communications-related parameters altering data type of, 121 connection_timeout, 749 attributes for, 263-267 ConnectionTimeout, 748 basing on domain definitions, 191 dummy_packet_interval, 749 basing on domains, 264 DummyPacketlnterval, 749 characteristics of, 211-212 RemoteAuxPort, 750 collation sequences for, 176 RemoteBindAddress, 751 defining as primary keys, 275 RemoteServiceName, 750 defining for EOL characters, 283 RemoteServicePort, 750 defining in tables, 263-269 TcpRemoteBufferSize, 751 defining with SELECT statements, community discussions, forum for, 1019 360-362 comparison operators designing, 170 in expressions, 392 dropping, 289-290 overview of, 394-396 granting REFERENCES rights on, 720 precedence of, 393 granting UPDATE rights on, 719-720 comparison predicators, examples of, including integrity constraints for, 292 396--398 making non-nullable, 303 comparisons modifying in tables, 288-289 performing on number types, 128 returning with views, 486 relationship to indexes, 318 significance of, 118 compatibility parameters sorting by, 470 CompleteBooleanEvaluation, 756 specifying with subqueries, 443-446 OldParameterOrdering, 757 storage restrictions of, 169 CompleteBooleanEvaluation parameter, storing definitions of, 972-973 description of, 53, 756 using CHARACTER SET attribute with, complex indexes 266 overview of, 322-323 using COLLATE clause with, 266-267 search criteria for, 324 using DEFAULT attribute with, 264-266 using OR predicates in queries with, viewing contents with stored 323 procedures,627-629 complex queries, performance gain for, columns with defaults, using INSERT 617. See also DML queries; multi• statements with, 372-373 table queries; queries command mode, operating isql in, components, examples of, 927-930 807-808 composite indexes command prompt, using gsec from, advisory about, 319 704-705 overview of, 322-323 command-line switches for isql, overview search criteria for, 324 of,808-809 using OR predicates in queries with, command-line tools 323 disk space requirements for, 4 composite keys, significance of, 27 4 examples of, 67-68 compound keys commas (,), separating columns with, 263 relationship to query plans, 464 comment (#), usingwith unused significance of, 27 4 parameters, 742
1053 Index
COMPUTED columns Consistency isolation Ievel, overview of, characteristics of, 267 524-525,527,553 defining for views, 491 consistency of transactions, significance examples of, 268-269 of, 506 using with expressions, 407-414 constants in expressions CON> prompt, significance of, 70 description of, 392 concatenation operator (II) returning as read-only, 362 example of, 162, 393 as runtime output, 408-409 in expressions, 392 constraints precedence of, 393 adding, 292-293 concatenation, overview of, 162 dropping, 290-291 concurrency integrity constraints, 269, 271-280 and isolation Ievel, 522-525 interaction of, 303 parameters associated with, 521-522 named constraints, 270 significance of, 83, 521 overview of, 269 condition clause, significance of, 580 referential constraints, 269-270 condition testers, relationship to CONSTRAINTS_ COLUMN_ USA GE system predicates, 389 view, example of, 978 CONDITIONAL attribute, using with CONTAINING comparison predicator, shadows, 250, 253 purpose of, 396 conditional blocks, using, 580-582 context variables conditional expressions, description of, description of, 392 392 examples of, 117 conditional join syntax, 434-435 overview of, 115-116 conditionallogic functions, summary of, using with expressions, 409 881-883 continuation prompt in isql, significance configuration file of, 783-784 changing configuration parameters in, Contributed Downloads pages, web 49-53 address for, 67 overview of, 49, 742 Control Panel applets configuration settings for locks. See lock Firebird Manager, 61 configuration settings obtaining, 17 configuration-file parameters. See also control tables filesystem-related parameters; input lookup keys in, 658 arguments; output arguments; relationship to data models, 304-306 parameters relationship to RI (referential integrity), external_file_directory, 775 656 external_function_directory, 773 conversions, performing on number types, ExternalFileAccess, 774 128 formof, 742 Converts entry in lock header block, overriding default port numbers with, explanation of, 863 39 core developer's Iab forum, web address setting, 7 42 for, 1017 UdfAccess, 772-773 correlated subqueries CONNECT statements, using, 69-70 overview of, 444-446 connection path bug, explanation of, 36 relationship to multi-table queries, 431 connection requests, listening to with corrupt databases Classic server on Linux/UNIX, 58 managing, 257 connection strings repairing with gfrx, 84 7 and database aliases, 65 COUNT() function example of, 41 aggregating number of columns stored modifying for access control, 66--67 with, 481 syntax for, 34-36 purpose of, 418, 475 using port numbers and service names using as aggregating function, 477-479 in, 40-41 using with SELECT statements, connection_timeout parameter, 369-370 description of, 749 CPU architecture, relationship to naming Connections, testing with ping, 42-43 conventions for installation kits, 8 ConnectionTimeout parameter, cpu_affinity parameter, description of, 52, availability of, 748 746
1054 Index
CPUAffinityMask parameter, description custom character sets, overview of, of, 52, 746 179-180. See also character sets CREATE DATABASE statements custom exceptions, storing in versus CREATE SCHEMA, 234 RDB$EXCEPTIONS system table, 960 example of, 71-72 custom indexes, using with constraints, using with scripts, 226 276-277 CREATE EXCEPTION statement,·syntax custom RI, implementing, 656-659. See for, 666 also RI (referential integrity) CREATE GENERATOR statements, using custom triggers. See also action triggers; with triggers, 64 7 BEFORE triggers; triggers CREATE INDEX statements, using, and DML operations, 383-385 320-322 phases/events of, 384 CREATE OR ALTER PROCEDURE Czech users, website for, 1017 statements, changing stored procedureswith,629,631-632 D CREATE OR ALTER TRIGGER statements, using, 661-663 -d[atabase] name command-line switch of, 808 CREATE PROCEDURE Statements, syntax for isql, description for, 602 data definitions CREATE ROLE statement, example of, 724 benefits of encapsulation of, 192 CREATE SCHEMA statements versus significance of, 207 CREATE DATABASE, 234 Data entry for lock blocks, explanation of, CREATE SHADOW statements, example of, 870 250-252 data integrity problems, examples of, 505 CREATE statements data manipulation statements, support mandatory and optional attributes for, for, 563 234-236 data models, relationship to lookup tables, and triggers, 573 304-306 using with generators, 130 data protection, management in CREATE TABLE statements dient/ server database systems, 77 syntax for, 262 -data switch, using with gstat, 331, using with mixed number types, 141 339-341 CREATE TABLE ... EXTERNAL FILE data types. See also character types; Statements number types restrictions and recommendations for, altering for columns, 121 282-284 altering for domains, 121-122 syntax for, 281-284 constraints on alteration of, 202 CREATE TRIGGER Statements converting, 119-120 components of, 643 keywords use for specification of, 122 syntax for, 644 restrictions in static SQL, 135 CREATE VIEW statements, using, 489-493 restrictions on alteration of, 289 CreateinternalWindow parameter, significance of, 113 description of, 752 specifying, 113 CROSSJOINs support for, 113-114 using with multi-table queries, 438 data values, validating with CHECK using with plans, 457-458 constraints, 277-279 cross-version backups, advisory about, database aliasing. See aliasing 820 database applications, common CURRENT_* context variables, characteristics of, 81 descriptions of, 115-116 database cache. See also cache CURRENT_TRANSACTION context configuration variable, example of, 512 lirnits of and defaults for, 241 cursor operations, objective of, 356-357 overview of, 240-241 cursor sets, relationship to DML queries, and system requirements, 3 356-357 taking pragmatic approach toward, 245 cursors database Connections, troubleshooting, implementing, 357 915-917 in PSQL, 614-615 database conversions, flaws in, 80 for re-entrant JOINs, 440-441 database design criteria for, 208-209 data model component of, 210
1055 Index
description and analysis phase of, creating remotely, 235 209-210 creating with isql, 70-71 resource for, 210 declaring UDFs to, 426--429 database flles. See also extemal flles default character sets for, 170 backing up to, 820 designing, 208-220 copying while users are logged in, 258 determining locations of, 231-232 database hygiene, overview of, 254-258 dropping, 259 database information, storing in flle-naming conventions for, 219-220 RDB$DATABASE system table, 959 getting information about, 237-238 database objects. See also objects Iimits on, 946 creating and altering with isql, 788 ownership of, 235 naming conventions and constraints physical objects in, 211-217 for, 218 physical storage for, 231-232 database pages protecting, 822 explanation of, 91, 211 recovering with shadows, 24 7-248 storing information about, 969 restoring backups to, 258 database path aliases. See also aliases; restoring by overwriting, 824-825 table aliases restricting, 552 storing, 34 running single versus multiple, 210 using port syntax with, 41 shutting down, 839-841 database recovery process. See recovery SQL-dialect considerations, 123-124 process upgrading to ODS, 815 Database resource lock, overview of, validation and repair of, 256-258 869-871 validation guidelines for, 846-847 database security. See also physical datasets security; server security as input sets, 355-356 effect of, 713 relationship to DML queries, 353-354 implementing, 93 date and time functions, summary of, versus security access, 232-233 890-898 database settings, changing, 842-846 date context variables, examples of, 150 database size, establishing, 242-243 DATE data type database structures, vulnerability of, 846 casting in dialect 3, 154 database sweeping. See sweeping overview of, 143 Database Workbench graphical admin date formatting routines, summary of, desktop, features of, 937 913-914 database_cache_pages parameter, date literals significance of, 240, 747-748 examples of, 118, 148 DatabaseAccess parameter, description of, in expressions, 392 51, 744 implicit type-casting of, 149-150 databases. See also multi-file databases; overview of, 117 RDBMSs (relational database pre-defined date literals, 148-149 management systems); single-flle quoting of, 147 databases recognized formats for, 144-148 accessing with gfix, 836-837 using, 144 administering, 67-68 white space in, 147 advisory about configuration of, 240 DATE operand, result of, 151 advisory about creating and moving of, date parts, concatenating, 152 34 date values, using operations with, altering, 239-240 150-152 attaching to under roles, 725 date-parts, retuming, 477 backing up multi-flle databases to dates multiple flles, 820-821 Iimits on, 945 backing up to multiple targets, 821 separators in non-U.S. dates, 147 changing ownership of, 816 date/time data, exchanging with other characteristics of, 91 applications, 155-156 connecting to from interactive mode of date/time types, casting between, 153, isql, 782-783 155-159 connecting to locally, 70 DB administration utility, disk space creating, 233-238 requirement for, 4 creating interactively, 71-72 db_key. See RDB$DB_KEY system table
1056 Index
DBak backup tool, features off, 939-940 default cache size, setting witb gfix, 842 DBI module for Perl, significance of, 931 DEFAULT CHARACTER SET clause, DBMS conversions, forum for, 1018 specifying character set codes in, 170 DBXpress drivers, features of, 929 default values, relationship to triggers, DD date literal, description of, 145 650-651. See also values DDL (data definition language) DefaultDbCachePages parameter CHECKexpressions in, 417 availability of, 74 7 overview of, 348-349 changing, 245 significance of, 208 significance of, 240 DDL scripts. See also scripts; manual definition tables scripting lookup keys in, 658 committing statements in, 226-227 relationship to data models, 304-306 contents of, 221-224 relationship to RI (referential integrity), creating, 225 656 explanation of, 220 degree number including comments in, 222 grouping by, 479 including isql statements in, 223 sorting by, 4 71-4 73 including terminator syrnbols (;) in, using witb non-aggregating 223-224 expressions, 478 DDL statements degree of columns, explanation of, 288 effect of issuing in isql, 784 degree, relationship to sets of data, 354 entering in isql, 787 delete interactive command in gsec, effect switching to autocommit mode for, 784 of, 701 DDLsyntax DELETE privilege, access granted by, 715 creating domains witb, 192 DELETE statements, using, 378 overview of, 348-349 DELETE_EMPLOYEE executable de[lete] command in gsec, example of, 704 procedure dead transactions, significance of, 514-515 adding exception-handling code to, 672 Deadlock scans entry in lock header block, example of, 608-610 explanation of, 863 DELETING context variable deadlocks description of, 116 explanation of, 532-533 using with triggers, 646 occurrence of, 858 delimited identifiers in SQL-92, overview Deadlocks entry in lock header block, ot 114-115,218-219 explanation of, 863 Delphi, Kylix, and Borland C++Builder deadly embrace, explanation of, 532-533 components, features of, 927-930 DeadThreadsCollection parameter, Deiphi users, advisory about treatment of description of, 752-753 parameters, 380 DECIMAL data type deltas, relationship to transactions, 529 explanation of, 133 dependencies format of, 134 in CHECK constraints, 197 limits of, 127-128 storing in RDB$DEPENDENCIES minimum lengtb for character type of, system table, 960 121 dependency locking, providing witb table range and storage type of, 134 reservation, 527 restrictions in static SQL, 135 dependent rows, relationship to record declarative referential integrity, versions, 530 explanation of, 298 DEPT_BUDGET recursive stored DECLARE EXTERNAL FUNCTION procedure, example of, 612-613 Statement DESC constraint indexes argumentsfo~427 significance of, 276, 316 example of, 426, 429 using witb referential integrity, 300 DECLARE TABLE Statements, using witb DESC order, sorting by, 473 CREATE TABLE in ESQL, 262 DESC[ENDING] keyword, usingwitb dedicated servers, using, 695 CREATE INDEX statements, 322 DEFAULT attribute descending indexes, enforcing primary using witb columns, 264-266 keyswitb,276-277 using witb domains, 193-194 descriptor, passing parameters by, 763-764
1057 Index
desktop database applications, common and referential integrity constraints, characteristics of, 80-81 191 developer's Iab forum, web address for, restrictions for use of, 200 1017 storing definitions of, 961-964 development control, implementing, 228 using CHECK conditions with, 196-197 dialect 1 databases, migrating, 815-816 using CHECK constraints with, 195-197 dialect 1 time string, casting, 159 using COLLATE attribute with, 198 dialect conversions, using casting in, 157 using DEFAULT attribute with, 193-194 dialects in SQL. See SQL dialects using in column definitions, 198-200 dialects, significance of, 351 using NOT NULLattribute with, 194 dimensions of array columns, storing and variables, 583 information about, 961 DoS (denial-of-service) attacks, pre• directional indexes, overview of, 316 empting, 695 dirtyreads DOUBLE data type, minimum length for occurrence of, 505-506 character type of, 121 relationship to isolation Ievels, 522 DOUBLE PRECISION data type disaster recovery, providing for, 228 and converted databases, 134 disk locations, defaults for Linux and explanation of, 140-141 UNIX, 22-23 Iimits of, 127, 130 disk space, system requirements for, 4 double-pipe (II), concatenating strings DISTINCT row quantifier, using with with, 162 SELECT statements, 359 double-quotes (") division (/) operator, precedence of, 394 advisory about using to delimit strings, division, performing on fixed types, 162 135-138 and case sensitivity, 595 DML (data manipulation language) using with delimited identifiers, overview of, 349 218-219 significance of, 348 DPB (database parameter buffer), setting DML event indicator, relationship to cache size at database Ievel with, 244 triggers, 645 DROP DATABASE Statements, syntax for, DML event phases, overview of, 384 259 DML operations and state-changing DROP DOMAIN clause, example of, 203 events DROP INDEX statements, using, 325 custom triggers, 383-385 DROP PROCEDURE statements, using, referential integrity action clauses, 383 633 DML queries, relationship to sets of data, DROP SHADOW statements, example of, 353-358. See also complex queries; 254 mulitable queries; queries DROP TABLE statements, using, 294 DML Statements DROP TRIGGER statement, example of, effect of changes made by, 227 663 entering in isql, 787 DROPVIEW statement, example of, 496 documentation forum, web address for, DTP (distributed transaction processing) 1019 environments, using Firebird servers domain definitions in, 89-90 changing, 201-202 dummy updates, using with pessimistic changing in dialects, 121 row locks, 531, 554 domain identifiers, specifying, 192 dummy_packet_interval parameter, domain overrides, overview of, 199-200 description of, 53, 749 domains. See also BOOLEAN domains DummyPacketinterval parameter altering data type of, 121-122 availability of, 749 basing columns on, 264 description of, 53 creating, 192-198 duplicate chains, relationship to indexes, creating for encapsulation of data 328 definitions, 192 duplicate items, finding, 321 data types for, 193 durability of transactions, significance of, defining arrays as, 187 507 defining as text BLOB, 183 dynamic dient/ server applications, dropping, 202-203 developing, 97 overviewof, 119, 191-192 dynamic versus static SQL, 350
1058 Index
E ISC_USER and ISC_PASSWORD, 47 -e[cho] command-line switch for isql, setting in Linux and UNIX, 4 7 description of, 808 setting in Windows, 45-46 -e[xpand] switch for gbak backups, effect EOL (end-of-line) characters, defining of, 818 column for, 283 Easysoft ODBC driver, features of, 925 EPB (events parameter buffer), Eclipse website, address for, 930-931 significance of, 682 EDIT isql command, effect of, 790 equal to (=)Operator, precedence of, 395 editing tools, examples of, 596--597 EQUIJOINs. See also JOINs element types, using with ARRA.Ys, 187 using with indexed equalities, 460-461 ELSE clause, using for conditional using with multi-table queries, 439 branching, 580 using with no available indexes, 460 embedded clients, connecting, 35 error code lists, creating, 676--678 embedded Firebird applications error Iogs, maintaining, 673-674 embedded server applications, 99-100 error messages. See also troubleshooting embedded SQL applications, 99 example of, 597 Embedded Server in gbak, 830-833 features of, 757 in gfix, 852-853 and hard-coded database paths, 759 in gsec, 705-706 location and renaming library for, overview of, 981-1009 758-759 troubleshooting, 917-920 and multiple server compatibility, error status vector, significance of, 550 760-761 error trapping and handling logic, diagram and remote service utilities, 760 of, 668 running applications on, 758-760 escape characters, using, 162-163 server security issue related to, 760 ESQL (Embedded SQL) starting, 757-758 overview of, 349-350 stopping, 761 significance of, 99 embedded server model, using with synchronaus signaling in, 681 Firebird servers, 88-89 and transactions, 535 embedded servers. See also Firebird using DECLARE TABLE statements servers; servers with,262 I etc/host.equiv file, experimenting with availability of, 31 700 ' installing, 18-19 protecting, 718 event alerters embedded subqueries, aggregations with, significance of, 684 481-482. See also subqueries using in stored procedures and triggers, empddl.sql script, purpose of, 943 684-685 empdrnl.sql script, purpose of, 943 event callback function, significance of, employee.fdb file, default location for, 23 680 25 ' event model, diagram of, 681 employee.gdb sample database event variables, using with triggers, 646 EventMemSize parameter, description of building from scripts, 943-944 748 ' default location for, 25 overview of, 943 events END Statements, behavior of, 591 and asynchronaus listening, 683-684 engine architecture and design, forum for and asynchronaus signaling, 682 1018 ' identifying in triggers, 644 Enqs entry in lock header block, implementing in dient applications, explanation of, 863 684 entity-relationship model, relationship to problems with, 44 FOREIGN KEY constraints, 298 in PSQL, 569-570 enumerated types, storing definitions of relationship to triggers, 641-642 977 ' significance of, 678-679 environment variables specifying for triggers, 661-662 FIREBIRD, 47-48 and synchronaus listening, 681-682 FIREBIRD_LOCK and FIREBIRD_MSG, events mechanism, elements of, 679-680 48-49 events notification, uses for, 679 FIREBIRD_TMP, 48-49 EVTs (external virtual tables), features of, INTERBASE, 47-48 500
1059 Index
-ex[tract] command-line switch for isql Existence resource locks, overview of, description of, 808 873-874 extracting metadata with, 810-811 existential operators in expressions, exception handling description of, 392 performing in isql, 785-786 existential predicators versus user savepoints, 545 ALL() predicate, 402-403 exception messaging at runtime, overview ANY() predicate, 403 of, 675-676 EXISTSO predicate, 400-401 EXCEPTION statements IN() predicate, 402 descriptions of, 577 overview of, 400 using, 592 SINGUlAR() predicate, 403 exception types, scope of, 669-670 SOME() predicate, 403 exceptions. See also nested exceptions EXISTS() predicate, overview of, 400-401 altering or dropping, 666 EXIT isql command, effect of, 790 creating, 666 EXIT statements declaring in DELETE_EMPLOYEE description of, 578 executable procedure, 608 using, 590-591 diagnosing, 548-551 using with DELETE_EMPLOYEE example of, 666-667 executable procedure, 609 explanation of, 665-666 using with stored procedures, 611-612 handling, 667-675 exits and outputs, relationship to stored handling reassign_sales exception, procedures,611-612 671-673 explicit and implicit syntaxes, mixing in inPSQL, 569 JOINs, 435 PSQL response to, 666 explicit INNER JOIN, syntax for, 434-435 receiving, 550 explicit locking re-raising, 67 4 acquiring for rows, 530-531 storing in RDB$EXCEPTIONS system dynamics of, 555-557 table, 960 restrictions on, 558 in triggers, 674-675 explicit transaction control, significance types of, 665 of, 547. See also multi-database exclusive lock state, significance of, 857 transactions; transactions; user exclusive OR versus inclusive OR, 399 savepoints executable in Classic server versus expressions. See also predicates Superserver, 739-740 casting with, 155 executable procedures. See also and COMPUTED columns, 407-414 procedures; recursive procedures; NULL in, 404 selectable stored procedures; stored ordering and grouping conditions with, procedures 415-416 advisory about using SUSPEND overview of, 387-388 statements with, 671 inPSQL, 417 calling, 610-611 returning as read -only, 362 and complex processing, 606 and search conditions, 414-415 multi-table procedure example of, sorting by, 470-471 608-610 symbols used in, 391-392 operations in, 607 targeting BLOB columns with, 415 purpose of, 601, 606 using as operands, 152 support for "live" dient sets in, 606-607 using CASEO functions with, 409-413 executable strings, support for, 592-594 using COALESCEO functions with, EXECUTE privilege 411-413 access granted by, 715 using COMPUTED BY columns with, granting, 721 414 revoking, 729, 730-731 using GROUP BY clauses with, 416 EXECUTE PROCEDURE statements, using, using NULLIFO functions with, 413 379, 610-611 using ORDER BY clauses with, 416 EXECUTE statements usingWHERE clauses with, 414-415 advisory about, 594 exSQL website, address for, 930 description of, 578 external code modules, overview of, 761 using, 378, 592-594 external data, format of, 282-283 EXTERNAL FILE clause, purpose of, 281
1060 Index external files. See also database files fbmgr switches, table of, 57 exporting Firebird tables to, 286 fbmgr/ibmgr command-line tool, features importing to Firebird tables, 284-286 of, 67 securing, 282 fbserver child process thread, significance using as tables, 281-287 of, 15 external function libraries, advisory about, fbserver.exe file, default location for, 22, 23 31 fbserver.exe program, significance of, 59 external functions. See UDFs (user-defined fbudf library, features of, 425 functions) fbudf.dll file, default location for, 24, 26 externallocations, configuring, 772-775 fbudf.so file, default location for, 23, 25 external tables, converting to internal fbudf.sql file, default location for, 23, 24, tables, 287 26 external_file_directory parameter, fbudf.sql script description of, 775 example declaration of, 428 external_function_directory parameter, location of, 427 description of, 773 FETCH call, relationship to ORDER BY ExternalFileAccess parameter, description clause, 367-368 of, 52,774 FIBPlus components, features of, 928 EXTRACTO function fields arguments, types, and restrictions for, characteristics of, 211-212 157 creating in statements, 407-409 combining with other functions, file access, parameters relating to, 51-52 158-160 file names exception thrown by, 160 for Unux and UNIX components, 22-23 explanation of, 157 forWindows 32-bit platforms, 23-25 purpose of, 418 flle protection, implementing on syntax for, 157 Windows, 692 using, 419-420 file size, specifying for single-flle databases, 238 F file specification, significance of, 235 file-naming conventions, examples of, 219 -f switch for Lock Print reports, files. See database files description of, 859 flle-served versus client/server databases, -f[orce] n switch in gfix, purpose of, 851 76 -fa[ctor] n switch for gbak backups, effect filespec parameter of CREATE TABLE of, 818 statement, explanation of, 281 fb_inet_server file, default location for, 22 filesystem-related parameters. See also fb_inet_server.exe flle, default location for, configuration-file parameters; input 23 arguments; output arguments; fb_lock_mgr file, default location for, 22 parameters fb_lock_mgr.exe file, default location for, DatabaseAccess, 744 23 RootDirectory, 743 fb_lock_print command-line tool fllesystems, securing, 689-690 default location for, 24 Firebird features of, 68 character sets in, 167-173 syntax for, 859 maintenance oftable data in, 211 fbclient.dll file, default location for, 24 root directory in, 50-51 fbembed.dll flle running as application on Windows, contents of, 18 61-64 default location for, 24 running as service on Windows NT, fbguard.exe program 2000, and XP, 60-61 default location for, 22, 23 running on Unux/UNIX, 55-59 significance of, 59 and SQL standard, 347 fbintl and fbintl.dlllibraries, contents of, third-party tools for, 942 771 Firebird 1.0.3 fbintl file, default location for, 23 installing on Unux and UNIX, 25 fbintl2 shared library, significance of, 179 installing on Windows 32-bit platforms, fbintl.dll file, default location for, 24 26 fbmgr commands, using with Superserver Firebird 1.5 on Unux/UNIX, 56-57 authenticating users in, 707 fbmgr file, default location for, 23
1061 Index
character sets for, 951-955 Firebird resources. See resources; websites collations in, 951-955 Firebird server version, querying with gfix, error codes in, 981-1009 846 installing on Linux and UNIX, 22-23 Firebird servers. See also embedded installing on Windows 32-bit platforms, servers;servers 23-25 in DTP (distributed transaction limits on, 945-949 processing) environments, 89-90 preventing unauthorized access to, jobs done by, 86 693-694 largest example of, 85 Firebird 1.5 and higher operating system platforrns for, 86-87 explicit locking in, 555-557 overview of, 85 PSQL language extensions in, 567 running on Windows, 59-64 Firebird 1.5 dients and terminal servers, 90-91 disabling existing installations of, 101 topologies for, 87-90 installing on Windows, 104-108 Firebird Service Manager, using gbak with, uninstalling, 108 828-830 Firebird 1.5 databases Firebird service, starting and stopping, using Nonesetting with, 231 60-61 using Restrietsetting with, 231 Firebird SQL, variations between subsets Firebird l.O.x of, 350. See also SQL (Structured authenticating users in, 707 Query Language) bug with views in, 499 Firebird support forum, accessing, 1017 limits on, 945-949 Firebird tables. See tables missing parameters in, 743 Firebird tools forum, web address for, 1018 preventing unauthorized access to, 693 Firebird website Firebird l.O.x dients address for, 6 disabling existing installations of, 101 forum for, 1019 installing on Windows, 103-104 FIREBIRD _LOCK environment variable, Firebird API. See API functions significance of, 48-49 Firebird CFS browser, web address for, 676 FIREBIRD _MSG environment variable, Firebird dient library, overview of, 96-97. significance of, 48-49 See also dient libraries FIREBIRD _TMP environrnent variable, Firebird dients significance of, 48-49 characteristics of, 95-96 firebird.conf file dient library names and default default location for, 22, 24 locations of, 109-110 format of parameter entries in, 50 examples of, 95 searching for, 51 setting up to find service ports, 40 using copy of, 41 Firebird configuration file firebird.msg file, default location for, 22, 24 changing configuration parameters in, firebird.xinetd file, default location for, 23, 49-53 25 overview of, 49 firewalls, using, 695 Firebird developers, becoming, 1019 FIRST (m) keyword, using with SELECT FIREBIRD environment variable, statements, 360 significance of, 47-48 FIRST_NAME column in USERS table, Firebird forums. See forums gsec option for, 702 Firebird installer fixed decimal types, explanation of, 127 using with Firebird 1.5 and higher, fixed types 104-106 behavior in operations, 135-138 using with Firebird l.O.x, 103 mixing with floating-point types, Firebird Manager applets, obtaining, 17 140-141 Firebird Manager Control Panel applet, fixed-decimal types features of, 61 and converted databases, 134 Firebird .NET Provider, features of, overview of, 132-133 925-926 fixed-length character types Firebird ODBC/JDBC driver, features of, byte limitation of, 161 924-925 examples of, 164 Firebird processes, stopping, 59 FK (FOREIGN KEY) constraints Firebird project sites, web addresses for, dropping, 290-291 1016 enforcing entity relationships with, 299
1062 Index
overview of, 298-299 newsgroup interface, 1019 relationship to narned constraints, ODBC-JDBC driver project, 1018 269-270 PHP, 1018 relationship to referential integrity, 298 QA testers' lab, 1017 Flags entry tech support for Firebird, 1017 for lock blocks, 871 tools for Firebird, 1018 in lock header block, 863 Visual Basic, 1018 in owner blocks, 866-867 forward slash (/) for request blocks, 875 significance of, 35 FLOAT data type using with Windows connection explanation of, 139 strings, 40 limits of, 127 usingwith UoSo MM/DD/CCYYformat, minimum length for character type of, 147 121 fractions of seconds, storage of, 143 precision of, 139 Free locks entry in lock header block, floating-point data types explanation of, 865 DOUBLE PRECISION, 14Q-141 Free owners entry in lock header block, explanation of, 127 explanation of, 864 FLOAT, 140 Free requests entry in lock header block, mixing fixed types with, 140-141 explanation of, 865 overview of, 139-140 FreeBSD, requirements for, 6 flow of control Statements French users, website for, 1017 EXCEPTION statement, 592 FROM clause, using with SELECT EXIT statement, 590-591 Statements, 362-363 LEAVE statement, 591 -full switch in gfix, purpose of, 851
FOR SELECT 0 0 oloops, using, 588-590 FULL _NAME computed column, example
FOR SELECT 0 0 0 DO construct, using, of, 268 617-618 FULL OUTER JOINs, using with multi• FOR UPDATE clause table queries, 437-438 relationship to explicit locking, 557 FULL_NAME column in USERS table, gsec using with SELECT statements, option for, 702 367-368 function calls
FOR 0 0 0 SELECT construct, using cursors and internal SQL functions, 418-424 with,614 overview of, 417
FOR 0 oo SELECT oo o INTO oo o DO oo o function expressions, sorting on, 471 statement, description of, 578 function identifiers forced writes in expressions, 392 disabling, 257-258 using with UDFs, 428 enabling and disabling, 844-845 function libraries, advisory about, 31 setting with gfix, 836 function modules, writing, 763 significance of, 237-238 function summary FOREIGN KEY constraints, relationship to BLOB functions, 905-909 named constraintso See FK (FOREIGN conditionallogic functions, 881-883 KEY) constraints date and time functions, 89Q-898 foreign keys date formatting routines, 913-914 defining for referential integrity, 300 mathematical functions, 884-890 purpose of, 213 string and character functions, 898-904 result of creating indexes for, 335-336 trigonometric functions, 909-913 -forever switch for tbmgr/ibmgr, functions, aggregating, 423-424 description of, 55 forums G architecture and design of engine, 1018 community discussions, 1019 -g[arbage_collect] switch for gbak core developers' lab, 1017 backups, effect of, 818 DBMS conversions, 1018 "gap," relationship to OIT and OAT, documentation, 1019 517-518 Firebird website, 1019 gbak BackupRunner, features of, 940 JDBC/JCA driver support, 1018 gbak "broken pipe" error, fixing, 1Q-11 oNET Provider developer and users', gbak command-line tool. See also 1018 backups; remote backups
1063 Index
advisory about performing cross- gdslib.so flle, default location for, 25 version backups with, 820 Gemini ODBC driver, features of, 925 arguments for, 818 GEN_ID() function backing up metadata backups with, 821 invoking, 130-131 backing up multi-flle databases to purpose of, 418 multiple flies with, 820-821 using, 422-423 backing up to single flies with, 820 GENERATOR objects, purpose of, 214 backup switches for, 818-819 generatorvalues, resetting, 131-132 changing database settings with, generators 842-846 breaking, 132 changing ownership of databases with, declaring, 130 816 getting current value of, 131 creating read-only databases with, 247 storing names and IDs of, 967 database backup and restore rights in, using negative stepping with, 130 816 using with triggers, 64 7 default location for, 23, 24, 25, 26 Gentle.NET, web address for, 926 features of, 67-68, 813-814 gfix command-line utility invoking, 817 accessing databases with, 836-837 performing explicit shutdowns with, automating two-phase recovery with, 839 849 performing remote backups with, changing access mode with, 843 821-822 changing SQL dialects with, 843 performing transportable backups creating read-only databases with, 247 with, 819-820 default location for, 23, 24, 25, 26 recovering databases with, 933-936 features of, 68, 835 running backups with, 817-822 -kill switch option in, 254 running restore operations with, operating shadows with, 849-850 822-828 performing data validation and repair user names and passwords in, 817 with, 846-84 7 using with Firebird Service Manager, performing transaction recovery with, 828-830 847-849 gbak error messages, causes and recovering databases with, 933-936 suggested actions to take, 830-833 recovering limbo transactions with, 849 gbak flies, restoring, 258 setting cache size at database Ievel gbak restores, arguments for, 823 with, 243 GC (garbage collection) syntax for, 835 during backup, 255-256 using, 835-837 and "interesting transactions", 514 gfix error messages, causes and suggested performance of, 837 actions to take, 852-853 significance of, 255 gfix -shut command, using, 840-841 versus sweeping, 517-518 gfix switches, overview of, 850-852 gdef command-line tool, default location GID column in USERS table, gsec option for, 23, 24, 25, 26 for, 702 gds_db port service gli command-line tool, default location significance of, 36 for, 24 troubleshooting, 917, 919 global pointers, returning for non• gds_inet_server file, default location for, 25 threaded Classic server, 766 gds32.dll file gpre command-line tool, default location default location for, 24, 26 for, 23, 24, 25, 26 purpose of, 104 grant authority, revoking, 733-738 GDSCODE context variable GRANT EXECUTE statement, example of, description of, 116 721 relationship to exception handling, Grant Manager permission manager, 669-670 obtaining, 941 targeting exceptions with, 549 Grant Master permission manager, trapping numeric error codes in, obtaining, 941 673-674 GRANT statement, using with privileges, GDSCODE error codes, overview of, 718-719, 725 981-1009 GRANT UPDATE ON USERS TO PUBLIC gdsintl.dll file, default location for, 26 statement, using, 707
1064 Index grant_perms procedure, installing directly, using from command prompt, 704-705 736--738 gsec examples grantees a[dd] command, 703 assigning privileges to, 722 de[lete] command, 704 revoking privileges from, 731-732 display command, 702-703 graphical admin desktops h[elp] or ?, 704 BlazeTop, 938 mo[dify] command, 704 Database Workbench, 937 q[uit] command, 704 IB_SQL, 939 gsec options, relationship to USERS table, IBAccess, 938 702 IBAdmin, 938 gstat command-line tool IBExpert, 937-938 calling with switches, 330 IBOConsole, 939 default location for, 23, 24, 25, 26 greater than (>) operator, precedence of, features of, 68 395 getting index statistics with, 330 greater than or equal to (>=) operator, getting transaction statistics with, precedence of, 395 518-519 GROUP BY clauses interface for, 330-336 COLLAGE sub-clause of, 480 switches for, 331 collation sequences in, 177 Guardian effect of, 473-474 and Classic server, 63 HAVING sub-clause of, 479 setting up manually, 17 using input sets with, 355 showing service names for, 16--17 using with expressions, 416 starting from command prompt, 62 using with SELECT Statements, using with Superserver on Linux/UNIX, 365-366 55 GROUP BY list, expressions disallowed in, GuardianOption parameter, description 478 of, 753 GROUP _NAME column in USERS table, gsec option for, 702 H groupable field list, significance of, 474-475 -h switch for Lock Print reports, grouped queries, using ORDER BY clauses description of, 859 in, 480 h[elp] command in gsec, example of, 704 grouping conditions -h[ousekeeping] switch in gfix, purpose of, aggregations with embedded 851 subqueries, 481-482 "Hardening Windows 2000" lab subqueries with embedded presentation, accessing, 691 aggregations, 480-481 Hash lengths entry in lock header block, grouping items explanation of, 864 examples of, 4 76 Hash queue entry for lock blocks, restrictions on, 476-477 explanation of, 871 grouping levels, mixing and using with Hash slots entry in lock header block, aggregations, 482 explanation of, 864 grouping with indexes, 317-318 HAVING clause, using with SELECT groups Statements, 366 adding users to, 21 HAVING sub-clause of GROUP BY, formation of, 4 74 example of, 4 79 versus roles, 716 header elements gsec command-line tool in stored procedures, 602-603 default location for, 23, 24, 25, 26 in triggers, 644-645 encrypting passwords with, 698 using with triggers and stored entering user credentials with, 697 procedures, 576 error messages in, 705-706 header information, storing, 973-974 features of, 68 -header switch, using with gstat, 331, interactive commands in, 701 337-338 running as remote dient, 701 help interactive command in gsec, effect starting interactive sessions with, of, 701 700-702 HELP isql command, effect of, 790 using directly, 20-21 -help switch for tbmgr/ibmgr, description of, 57
1065 Index
HH date Iitera!, description of, 145 ibserver.exe flle, default location for, 25, 26 history blocks, overview of, 876-877 IBSurgeon database repair tools, features HOSTSflle of, 940-941 locating, 33-34 identifiers, Iimits on, 945 updating for nodes, 32 identity type, advisory about, 130 HP-UX 10 +, requirements for, 6 IDX abbreviation, explanation of, 957 hyperthreading, support for, 5 IF. .. THEN ... ELSE construct, using, 578, hyphen (-), using with gsec command 580--582 switches, 704 implicit and explicit syntaxes, mixing in JOINs, 435 I implicit type conversion, examples of, 119-120 -i[gnore] switch IN comparison predicator, purpose of, for gbak backups, 818 396--397 in gfix, purpose of, 851 IN() predicate, overview of, 402 -i[nactive] restore switch in gbak, effect of, INACTIVE trigger status, explanation of, 823 645 -i[nput] file command-line switch for isql, inclusive OR versus exclusive OR, 399 description of, 808 index depth, significance of, 334 -i
1066 Index
inspecting, 324 installations, testing, 13-17 versus keys, 216, 280 instclient.exe, running with Firebird 1.5 limits of, 315-316 and higher on Windows, 107, 108 limits on, 948 instreg.exe file multi-column indexes, 322-324 default location for, 24, 26 and query plans, 216-217 running in command window, 104 rebuilding, 326, 330 instsvc.exe file restrictions for dropping of, 326 default location for, 24, 26 segmented indexes, 323 features of, 67 sort direction of, 316 using, 60-61 sorting and grouping with, 317-318 INTEGER ARRAY columns, defining, storing definitions of, 968-969 187-188 tasks performed by, 453 INTEGER data type unavailability for join terms, 454 limits of, 127-129 indexing minimum lengtb for character type of, improving in query plans, 463 121 significance of, 468-469 integer types, overview of, 128-132 inetd daemon, configuration on Classic integer/integer division, performing on server on Linux/UNIX, 38-39 fixed types in SQL dialects, 136-137 inline comments, including in DDL integrity constraints scripts, 222 characteristics of, 269 inner joins, using with multi-table queries, CHECK constraints, 277-279 433-435 including for columns, 292 input arguments. See also configuration• NOT NULL constraints, 271 file parameters; fllesystem-related PRIMARY KEY constraints, 271-272 pararneters; output arguments; storing information about, 971-972 parameters UNIQUE constraints, 280 calling rules related to, 610-611 integrity rules, varying witb action using witb variables, 586 triggers, 301-303 INPUT isql command, effect of, 791 interactive commands, using with isql, input sets 787-788 output sets as, 355-356 interactive mode of isql. See also isql relationship to DML queries, 354-355 command-line utility INPUT statements, chaining scripts with, accessing default text editor from, 780 229 connecting to databases from, 782-783 Insert prior entry in lock header block, continuation prompt in, 783-784 explanation of, 864 running from remote clients, 779 INSERT privilege, access granted by, 715 starting isql from, 780-782 Insert queue entry in lock header block, and terminator character, 783 explanation of, 864 interactive reports, printing witb Lock INSERT statements Manager, 860-861 advisory about using witb array slices, interactive sampling, measuring Lock 189 Managerperformance witb, 877-878 overview of, 370-371 interactive sessions, starting, 700-701 using witb automatic fields, 372-374 InterBase 6 databases, advisory about using witb external tables, 284 disabled forced writes in, 845 using with subqueries and JOINs, Interbase Datapump tool, features of, 941 446-447 InterBase, disabling existing dient INSERTING Boolean context variables, installations for, 101 using with triggers, 646 INTERBASE environment variable, INSERTING context variable, description significance of, 47-48 of, 116 InterBase, web resource for, 1016 inserts, relationship to MGA, 511 InterBasedatabases, SQL-dialect installation drives, system requirements considerations related to, 123-124 for, 4 interbase.msg file, default location for, 25, installation kits 26 contents of, 6-7 InterBaseXpress components, features of, and mirror sites, 7-8 929 naming conventions for, 7-8 interesting transaction, explanation of, 255 obtaining, 6 interface elements of events, list of, 680
1067 Index
internal cursors, using with multi-table executing scripts with, 225 queries, 440-441 executing stored procedures in, 610 international dates, advisory about, 147 getting transaction statistics with, 519 internationallanguage modules, overview inspecting plans with, 455-457 of, 771-772 interactive commands in, 787-788 interoperability of client/server database Operating in command mode, 807-808 systems, significance of, 77 purpose of, 49, 779-787 intersection tables, resolving many-to• retrieving line buffers with, 785 many relationships with, 309-310 setting cache size at database Ievel interval of time, advisory about storage of, with,244 144 setting SQL dialects in, 786-787 intl.so file, default location for, 25 and SHOW commands, 785 INTRODUCER character set marker, using, SHOW DATABASE command in, 237 171-172 starting, 69 intruders, slowing down, 711-712 starting transactions with, 537 IP addresses switches for, 808-809 advisory pertaining to Windows 95 and transactions in, 784-785 98 workstations, 33 using SET TERM statements in, 57 4 determining, 32 using SQL Statements with, 69-70 IpcMapSize parameter, availability of, 753 using warning with, 785 IpcName parameter, description of, isql commands 753-754 BLOBDUMP, 789 IPX/SPX protocol, Iack of support for, 920 BLOBVIEW; 789 IS [NOT] NULL predicate, overview of, EDIT, 790 399-400 examples of, 788 isc_config file, default location for, 25 EXIT, 790 isc_database_info() function, significance HELP, 790 of, 342 INPUT, 791 isc_dbp_num_buffers parameter, purpose OUTPUT, 791-792 of, 244 QUIT, 792 isc_dbp_set_page_buffers parameter, SHELL, 792 purpose of, 244 isql dialect, setting, 808 isc_event_block() function, significance of, ISQL (Interactive SQL), overview of, 351 682 isql sessions, exiting, 807 ISC_PASSWORD environment variable, isql shell, viewing optimizer plans in, 317 significance of, 47, 232-233 isql statements, including in DDL scripts, isc_start_transaction() API function, 223 starting transactions with, 538 ISC_ USER environment variable, J significance of, 47, 232-233 isc4.gbk file, default location for, 25, 26 Japanese users, website for, 1017 isc4.gdb database JayBird JDBC drivers, features of, 923 default location for, 25, 26 JDBC drivers, features of, 923 significance of, 697, 706 JDBC/JCA driver support forum, web IS08859_1 character set, overview of, 175 address for, 1018 isolation Ievels, relationship to JOIN clause, using with SELECT concurrency, 522-525 Statements, 363-364 isolation of transactions, significance of, join order, deciding on, 465 506-507 JOIN queries, ambiguity in, 439 isql command-line utility. See also join specifications, getting "shape" of, 466 interactive mode of isql joining autocommitting statements in, 227 CROSS JOINs, 438 changing dient dialect in, 126 FULL OUTER JOINs, 437-438 continuation prompt in, 70 innerjoins,433-435 creating databases interactively in, 233 NATURAL JOINs, 439 creating databases with, 70-71 OUTER joins, 436-438 default location for, 23, 24, 25, 26 overview of, 432 editing with, 597 re-entrant JOINs, 441-443 examining dialect 1 dates with, 143 JOINs. See also EQUIJOINs exception handling in, 785-786 with indexed ORDER BY clauses, 459-460
1068 Index
mixing implicit and explicit syntaxes in, Length entry in lock header block, 435 explanation of, 862 performing without indexes, 454 less than (<) operator, precedence of, 395 relationship to indexes, 318 less than or equal to (<=) operator, relationship to plan expressions, 452 precedence of, 395 and rivers, 454-455 libtbdient.so file, default location for, 22 streams and rivers for, 356 libtbdient.so.l.5.0 binary, significance of, versus subqueries, 444-446 102 using with indexed equality keys, libtbembed.so dient library, advisory 458-459 about, 102 using with multi-table queries, 432 libtbembed.so.l.5.0 file, default location for, 22 K libgds.so.O, default location of, 102 libib_util.so file, default location for, 23 -k[ill] db_name switch in gfix, purpose of, libib_util.so-TSR ib_util file, default 851 location for, 25 -k[ill] restore switch in gbak, effect of, 823 LIKE comparison predicator, purpose of, Key entry for lock blocks, explanation of, 396-398 870 limbo transactions keys finding with gfix, 848 versusindexes,216,280 recovering with gfix, 849 making atomic, 214 significance of, 515, 551, 848 as table-level constraints, 216 line buffer, retrieving with isql, 785 types of, 212-214 line_delimiter parameter of CREATE keys for character sets, storing in TABLE statement, explanation of, 281 RDB$CHARACTER_SETS, 957-958 Linux keywords case-sensitivity of parameters in, 50, overviewof, 1011-1014 743 specifying data types with, 122 configuration of inetd and xinetd kill command, using with PID (process daemons on, 38-39 ID), 59 embedded server applications on, 100 -kill switch, using with gfix command-line installing Firebird 1.0.3 on, 25 utility, 254 installing Firebird 1.5 on, 22-23 kits. Seeinstallation kits locating ROSTS file in, 33 Kylix, Delphi, and Borland C++Builder locating services file in, 42 components, features of, 927-930 names and default locations of Firebird clients for, 109 L running Firebird on, 55-59 -1 switch settingenvironmentvariables in, 47 in gfix, 848 using Classic server with, 58-59 for Lock Print reports, 859 Linux dients, installing, 102-103 -l[imbo] switch for gbak backups, effect of, Linux kits, displaying in SourceForge, 9-11 818 Linux operating system, requirements for, -l[ist] switch in gfix, purpose of, 851 6 LAST_NAME column in USERS table, gsec Linux servers option for, 702 connecting to, 34, 69-70 late binding, relationship to parameters, creating databases on, 71 380 Linux SS Local databases, creating leaf buckets, relationship to indexes, 334 remotely, 235 LEAVE statements Linuxen, implementing NPTL on, 10-11 description of, 578-579 listening ports, setting, 37-39 using, 591 livelock, explanation of, 533 LEFT OUTER JOINs, using with multi• LLBLGen Pro, web address for, 926 table queries, 436-437 local access method in Classic server legacy databases, moving to dient/ server versus Superserver, 741 database systems, 81 local access options, overview of, 30 legacy indexes, importing, 316 local variables. See also variables Length entry for lock blocks, explanation in expressions, 392 of, 870 purpose of, 582 using, 584-585
1069 Index
using with stored procedures, 603-604 locking, pessimistic locking, 530-531 localsystem proflle, vulnerability of, 693 LockMemSize parameter, description of, LOCK BLOCK entry, explanation of, 870 52,879 lock block reports, syntax variation for, 869 locks lock blocks in Lock Manager features of, 855 entries for, 870-871 timing of, 530 overview of, 867-877 LockSemCount lock configuration setting, lock configuration settings availability of, 880 any_lock_mem_size, 879 -log switch, using with gstat, 331 any_lock_sem_count, 880 log tables, creating, 710 lock_acquire_spins, 878 LOG_SALES procedure, fixing, 631-632 lock_grant_order, 880 logging procedure lock_hash_slots, 879 creating for reassign_sales exception, LockAcqurieSpins, 878 671-672 LockGrantOrder, 880 creating to log login attempts, 710 LockHashSlots, 879 logical context, relationship to LockMemSize, 879 transactions, 545-551 LockSemCount, 880 logical operators lock conflicts, triggering, 531-532 in exper, 392 Lock entry for request blocks, explanation overview of, 398-399 of, 875 precedence of, 393 lock header block, entries for, 862-865 login attempts, logging, 709-711 lock management in Classic server versus lookup tables Superserver, 7 40-741 lookup keys in, 658 Lock Manager relationship to data models, 304-306 features of, 856 relationship to RI (referential integrity), and history blocks, 876--877 656 and interactive sampling, 877-878 lookup-requestor relationship, diagram of, and lock states, 856-857 657 and owner blocks, 865-867 loops, using with selectable stored printing interactive reports with, procedures, 618 860-861 lost update, occurrence of, 505 printing static reports with, 860 low selectivity indexes, significance of, reporting to files with, 861 304. See also indexes andrequest blocks, 874-877 Lock ordering entry in lock header block, M explanation of, 865 lock print, organization of, 861 -m[end) switch in gfix, purpose of, 851 command-line switch for Lock Print reports, switches for, 859-860 -m[erge_stderr) Lock Print utility, syntax for, 859 isql, description of, 809 gbak backups, lock resolution mode, using with -m[etadata) switch for of, 818 transactions, 525-529 effect lock states, overview of, 856-857 -m[ode) {read_write I read_only} restore of, 823 lock tables in Lock Manager, purpose of, switch in gbak, effect 843 857-858 -m[ode) switch in gfix, example of, for, 6 lock_acquire_spins lock configuration Mac OS, requirements minimum for, 4-6 setting, description of, 878-879 machine specifications, lock_grant_order lock configuration mandatory relationships with triggers, 653-655 setting, description of, 880 enforcing lock_hash_slots lock configuration setting, overview of, 312 in FOREIGN KEY constraints, 298 description of, 879 role LOCK_HEADER_BLOCK entry, Mandrake operating system, requirements 6 explanation of, 862 for, LockAcqurieSpins lock configuration MANUAL mode, using with shadows, 250, setting, availability of, 878 252-253 LockGrantOrder lock configuration manual scripting, overview of, 229-230. setting, availability of, 880 See also DDL scripts; scripts LockHashSlots lock configuration setting, manual sweeps, performing, 839 availability of, 879 many-to-many relationships, overview of, locking conflicts, occurrence of, 510 308-310 master script approach, using, 229-230
1070 Index masterkey password, advisory about, 19, MTS/COM+ transaction server framework, 207 overview of, 90 mathematical functions, summary of, multi-byte character set, limitations of, 163 884-890 multi-column indexes MAXO function advisory about, 319 description of, 423 overview of, 322-323 purpose of, 418, 475 search criteria for, 324 MaxUnflushedWrites parameter, using OR predicates in queries with, description of, 754 323 MaxUnflushedWriteTime parameter, multi-database applications, overview of, description of, 754 92-93 MERGE join-type, relationship to plan multi-database transactions, overview of, expressions, 452 551-552. See also explicit transaction MERGE method, effect of, 469 control; transactions; user savepoints metadata multi-dimensional arrays, support for, backing up, 821 187-188 extracting, 228, 809-811 multi-flle databases. See also databases; protecting, 714 RDBMSs (relational database significance of, 207-208 management systems); single-file storage of, 261 databases metadata changes, keeping track of, 965 creating, 238-240 MGA (multi-generational architecture) estimating size of, 242-243 and inserts, 511 multi-flle shadows, creating, 251-252 post versus COMMIT in, 509 multi-generational architecture, and rollback, 509 significance of, 254 and row locking, 510-511 multiple plans, queries with, 461-462. See and table-levellocks, 511 also plans; query plans and transactions, 508-509 multiple-file restores, performing, 825-827 Microsoft operating system, requirements multiplication (*) operator, precedence of, for, 5 394 Microsoft Windows, character sets for, 175 multiplication, performing on fixed types, MIDDLE_NAME column in USERS table, 138 gsec option for, 702 multi-row SELECT statements, variable MIN () function values from, 593-594 description of, 423 multi-table queries. See also complex purpose of, 418, 475 queries; DML queries; queries minimum machine specifications, and CROSS JOINs, 438 overview of, 4-6 and INNER JOINs, 433-436 mirror sites, relationship to installation and internal cursors, 440-441 kits, 8-9 and NATURAL JOINs, 439 MM and MMM date literals, description and OUTER JOINs, 436-438 of, 145 and re-entrant JOINs, 440-441 mo[dify] command in gsec, example of, and table aliases, 439-440 704 types of, 431-432 Mode entry for request blocks, multi-table sets, using RDB$DB_KEYwith, explanation of, 875 639 Modified Julian Day Number, significance Mutex wait entry in lock header block, of, 150 explanation of, 864 modify interactive command in gsec, effect of, 701 N modules altering and dropping, 598-599 -n switch for Lock Print reports, deleting source for, 599-600 description of, 859 developing, 595-600 -n[o_update] switch in gfix, purpose of, MonoDevelop, web address for, 925 851 month literals, English spellings for, -n[o_validity] restore switch in gbak, effect 147-148 of, 824 msg.gbak database, downloading, 676 -n[oauto] command-line switch for isql, msvcrt.dll runtime library, purpose of, 104 description of, 809 named constraints characteristics of, 270
1071 Index
defining PRIMARY KEY constraints as, NO WAIT option of lock resolution mode, 276-277 purpose of, 526 named cursors NO_DOGS exception, dropping, 666 declarations of, 356 NO_INDEXES.SQL script, downloading, purpose of, 614-615 457 Named Pipes protocol non-binary collations, specifying for example of, 35 character sets, 178 support for, 29 None setting, using with Firebird 1.5 names, using with UDFs, 428 databases, 232 NATIONAL CHAR VARYING() type, NONE special character set, qualities of, explanation of, 165 174 NATIONAL CHARACTER(n) fixed-length "non-parameterized" query, example of, character type, explanation of, 164 380 NATURAL JOINs, using with multi-table non-printable characters queries, 439 inserting into external files, 283-284 natural keys versus surrogate keys, 215 storing in strings, 162 natural order, relationship to query plans, non-repeatable reads 465 occurrence of, 505 NATURAL search, explanation of, 468 relationship to isolation levels, 522 naturally undateable dient sets, normalization significance of, 606 relationship to primary keys, 272 NCHAR VARYING() type, explanation of, significance of, 209 165 not equal to operators (<>, !=, -=, "=) NCHAR(n) fixed-length character type, operators, precedence of, 395 explanation of, 164 NOT POUND message, interpretation of, negative stepping, using with generators, 549 131 not greater than (!>, ->, ">) operators, nested exceptions, using as savepoints, precedence of, 395 671. See also exceptions NOT logical operator, purpose of, 398 nested procedures NOT NULL attribute calling, 625 advisory about using with colurnns, 265 returning values in, 624 advisory about using with COMPUTED using, 621-624 columns, 265 nested SELECT statements, using, 619-620 changing for domains, 201 nested sets, relationship to DML queries, using with domains, 194, 264 357-358 NOT NULL constraints nested transactions. See user savepoints characteristics of, 271 .NET Provider developer and users' forum, cross-referencing names and triggers web address for, 1018 for, 958 .NET Provider for Firebird, features of, NOT NULL predicate, significance of, 400 925-926 [NOT] EXISTS predicator, purpose of, 400 NET START command, example of, 60 [NOT] IN predicator, purpose of, 400 NET STOP command, example of, 60 [NOT] SINGULAR predicator, purpose of, NetBEUI protocol, significance of, 29 400 NEW context variables 'NOW' date literal, effect of, 118, 148 relationship to DML operations, 384 -nowarnings command-line switch for using, 587 isql, description of, 809 using with triggers, 646-652 NPTL (Native POS IX Thread Library), NEW.column-name statement, implementing on Linuxen, 10-11 description of, 578 -nt switch for gbak backups, effect of, 819 newsgroup interface, web address for, n-tier client/server model, characteristics 1019 of, 78-79 NEW.value, testing for null, 647 n-tier server applications, protecting, "next value" calculations, advisory about 694-695 using COUNT(*) for, 369-370 NULL attribute next value, calling for, 130-131 advisory about using with columns, 265 NHibernate, web address for, 926 advisory about using with COMPUTED NN date literal, description of, 145 columns, 265 nnnn date literal, description of, 145 nulllocks NO ACTION trigger, description of, 302 significance of, 856
1072 Index
using, 857-858 "Object is in use" error NULL predicate, significance of, 399-400 relationship to referential integrity, 312 null, testing NEWvalue for, 647 throwing,599,633,662-663 NULLIFO functions, using with object-oriented classes, relationship to expressions, 413 Firebird API, 98-99 NULLs objects. See also database objects in calculations, 404-405 applying privileges to, 716 considering, 403-404 granting privileges on, 718-719 effect in aggregations, 475 granting privileges to, 727 in expressions, 404 privileges on, 720-722 and external functions, 405-406 revoking privileges from, 732 impact of sorting on, 469 obligatory relationships setting values to, 406 enforcing with triggers, 653-655 specifying as DEFAULT attribute, 193 overview of, 312 using with domains, 193 role in FOREIGN KEY constraints, 298 NULLS FIRST keyword, sorting nulls with, OCTETS special character set, qualities of, 473 173-174 nurober types. See also character types; ODBC drivers, features of, 924-925 data types ODBC provider, obtaining for Firebird mixing, 141 interface, 90 operations on, 128 ODBC/BDE/ADO sources, pumping and support for, 127 migrating data from, 941 numbered rows, returning strings as, ODBC-JDBC driver project forum, web 616-617 address for, 1018 numeric conversions, minimum character ODS (on-disk structure) lengths for, 121 relationship to SQL dialects, 123-124 NUMERIC data type upgrading, 815-816 explanation of, 133 OIT (Oldest Interesting Transaction). See format of, 133 also OAT (Oldest Active Transaction); Iimits of, 127-128, 130 transaction statistics minimum length for character type of, conditions for updating of, 517 121 keeping moving, 515-518 range and storage type of, 134 significance of, 255, 513 restrictions in static SQL, 135 -ol[d_descriptions] switch for gbak numeric error codes, trapping in backups, effect of, 819 SQLCODE and GDSCODE context OLD context variables variables, 673-67 4 relationship to DML operations, 384 numeric strings in DSQL, evaluation of, using, 587 139 using with triggers, 646-652 OLD.column-name statement, description 0 of, 578 OldParameterOrdering parameter, -o switch for Lock Print reports, description of, 53, 757 description of, 860 OLE DB provider, obtaining for Firebird -o[ne_at_a_time] restore switch in gbak, interface, 90 effect of, 824 ON DELETE CASCADE action trigger, -o[nline] switch in gfix, purpose of, 851 description of, 302 -o[utput] file command-line switch for isql ON UPDATE CASCADE action trigger, description of, 809 description of, 302 extracting metadata with, 810 -once switch for fbmgr/ibmgr, description OAT (Oldest Active Transaction). See also of, 56 OIT (Oldest InterestingTransaction); one-line comments, including in DDL transaction statistics scripts, 222 conditions for updating of, 517 one-to-many relationships keeping moving, 515-518, 559-560 denormalizing with JOINs, 458 significance of, 513 significance to FOREIGN KEY object dependencies, maintaining constraints, 298 information about, 598 one-to-one relationships, overview of, 307 object identifiers, characters allowed for, operands 698 expressions as, 152
1073 Index
reversal of, 414-415 Owner ID entry in owner blocks, operat~ng system logins, restricting, 691 explanation of, 866 operatmg systems owner privileges, using with views, 488 for Firebird servers, 86-87 Owner type entry in owner blocks, requirements for, 5-6 explanation of, 866 operations Owners entry in lock header block, behavior offlxed types in, 135-138 explanation of, 864 performing on BLOBs, 184-185 rules for, 152 p using date and time values with, 150-152 -p command-line switch using with date and time values with for Lock Print reports, 860 150-152 ' purpose of, 37 operators. See SQL operators using override for, 37-39 in gbak, optimizer -p[age_size] n restore switch ignoring indexes chosen by, 465-466 effect of, 824 and indexes, 453 -p[rompt] switch in gfix navigatioH of streams by, 459-460 example of, 848 objective of, 452-453 purpose of, 851 relationship to query execution, 317, -pa[ssword] passward switch 356,450 ingbak, 824 signiflcance of, 452-455 for gbak backups, 819 signiflcance of table size to, 459 in gflx, 851 sort merges performed by, 454 using with gstat, 331 and streams, 453 page buffers, signiflcance of, 240 options argument for gbak -b[ackup], page ranges, specifying for multi-flle description of, 818 databases, 239 OR logical operator, purpose of, 399 page sizes OR predicates, using in queries of multi• changing when restoring databases, column indexes, 323 827 236 ORDER BY clauses. See also indexed characteristics of, and performance, 827-828 ORDER BY clauses switch for sorting output of SELECT queries with, -page[length] n command-line 469-473 isql, description of, 809 using in grouped queries, 480 PAGE_SIZE attribute, default byte size for, using with expressions, 416 236 using with SELECT Statements, 367 pages ordered set, example of, 626 explanation of, 91, 211 ORG_CHART selectable procedure storing information about, 969 calling, 620 parameters. See also conflguration-flle related example of, 619-620 parameters; fllesystem- arguments; output outer joins, using with multi-table queries, parameters; input 436-438 arguments related parameters, output arguments. See also configuration• communications- file parameters; fllesystem-related 748-751 756-757 parameters; input parameters; compatibility parameters, 772-775 parameters configuration-file parameters, sort space, advisory about, 590 for conflguring temporary using with variables, 586-587 744-745 OUTPUT isql command, effect of, 791-792 for flle access, 51-52 fllesystem-related parameters, 743-7 44 output sets 763-764 as input sets, 355-356 passing by descriptor, relationship to DML queries, 353-354 passing by reference, 763 outputs and exits, relationship to stored POSIX-speciflc parameters, 751-752 50 procedures,611-612 resetting in flrebird.conf, OWNER BLOCK entry, explanation of, 866 resource-related parameters, 746-751 763 owner blocks, relationship to Lock specifying for UDFs, storing for stored procedures, 970 Manage~865-867 owner flag states, overview of, 867 using, 380-381 using with batch inserts, 382
1074 Index
Windows-specific parameters, 752-756 overview of, 930-931 parent and child, declaring relationship physical security, overview of, 689-690. See between,300-301 also database security; server security Parent entry for lock blocks, explanation PID (process ID), using kill command of, 870 with, 59 parent structure, role in implementing ping, testing connections with, 42-43 referential constraints, 299 pinging servers, 13-14 PARENT table, implementing entity• PLAN clause, using with SELECT relationship model on, 299 statements, 367, 462 parentheses (()) in expressions, plan expressions description of, 392 elements of, 452 -pas[sword] password command-line symbols used in, 451 switch for isql, description of, 809 syntax for, 451 PASSWD column in USERS table, gsec plans. See multiple plans; query plans option for, 702 platform-based protection -password switch for fbmgr/ibmgr, on MicrosoftWindows, 691-693 description of, 57 overview of, 690-691 passwords on POSIX, 691 allowing change by users, 707-708 restricting operating system logins, 691 case sensitivity and character platforms, mixing, 31 limitations of, 698 port 3050 changing for SYSDBA, 19-21 overriding to port 3051, 38 encrypting, 698 significance of, 36 in gbak, 817 troubleshooting, 917, 919 random generation of, 19 port numbers recording, 699 overriding, 39 requiring, 691 precedence of, 750 vulnerability of, 706 port service names, overriding, 39 passwords list, hiding, 708-709 port syntax, using with database aliases, path names in function declarations for 41 UDFs, significance of, 429 PORTAL & STORE, web address for, 926 paths to databases, storing, 34 ports, role in event transport, 680 Pending entry in owner blocks, Portuguese users, website for, 1017 explanation of, 866 positioned update, explanation of, Perl, features of, 931 374-375 permissions POSIX Classic server, listing processes revoking, 728-732 with, 14. See also Classic server storing, 977-978 POSIX databases, creating remotely, 235 permissions managers, examples of, 941 POSIX direct local connect, providing local permissions procedure, example of, access by means of, 30 736-738 POSIX platform permissions scripts, generating with file specification for, 235 procedures, 734-736 invoking gbak on, 817 permissions structure, unintended effects protecting, 691 of, 727-728 restoring on when using Service permscripts.sql ftle, accessing, 738 Manager, 829 pessimistic locking starting gsec interactive sessions on, overview of, 552 700 significance of, 530-531 syntax for running restore operations statement-levellocking, 553-558 on, 822-823 table-levellocking, 553 POSIX security hole, significance of, phantom rows 699-700 occurrence of, 505 POSIX servers, using isql command-line relationship to isolation levels, 522 utility with, 69 phase POSIX Superserver, listing processes and identifying in triggers, 644 threads in, 15. See also Superserver relationship to triggers, 641-642 POSIX-specific parameters phase indicator, effect of alteration of, 661 RemoteFileOpenAbility, 751 PHP TcoNoNagle, 752 forum for, 1018 tcp_no_nagle, 752
1075 Index
post, role in MGA, 509 for multiple users, 723 POST_EVENT event_name statement on objects, 720-722 description of, 579 packaging, 715-716 using, 595 protecting, 714 POST_EVENT statements restrictions for objects, 716-717 significance of, 679 revoking, 729-730 using, 684-685 through roles, 724 precedence of SQL operators, overview of, unintended effects of, 727-728 393 and views, 487-488 precision, significance to number types, on views, 722 127 procedure definitions, altering, 598 predicateso See also expressions procedure expressions, sorting on, 4 71 and assertions, 389-390 procedureso See also executable stored overview of, 388-389 procedures; recursive procedures; truth evaluation of, 390-391 selectable stored procedures; stored and truth testers, 389 procedures "primary indexes," advisory about for combined use, 629 importation of, 271, 316 deleting source for, 600 PRIMARY KEY columns, atomicity of, elements of, 573-579 274-275 generating permissions script with, PRIMARY KEY constraints 734-736 applying, 275 granting ALL privilege to, 722 defining as named constraints, 276-277 granting privileges to, 723 dropping, 290-291 listing with dependencies, 599 including in column definition, 275 nesting, 621-625 overview of, 271-272 with running totals, 625-627 relationship to named constraints, 270 selecting aggregate functions from, primary keys 620-621 adding to existing tables, 277 testing, 629 choosing, 272-275 as users, 717 enforcing with descending indexes, Process entry for request blocks, 276-277 explanation of, 875 Iimitation of, 272 Process_id entry in owner blocks, problems with, 214 explanation of, 866 purpose of, 82, 212 processes in Classic server versus requirements for, 272 Superserver, 739-740 result of creating indexes for, 335-336 processor affinity, configuring at server and surrogate keys, 273-27 4 level, 5 PriorityBoost parameter, description of, ProcessPriorityLevel parameter, 755 description of, 755 PrioritySwitchDelay parameter, programming constructs description of, 754-755 BEGIN oo o END blocks, 579-580 PRMLEGE column in USERS table, gsec conditional blocks, 580-582 option for, 702 PROTBCTED attribute, using with table privilegeso See also HEFERENCES privilege reservation, 528 for altering and dropping modules, 598 protected read lock state, significance of, applying to objects, 716 857 assigning to roles, 725 protected write lock state, significance of, assignment of, 93, 262 857 effect of, 714 ps command, inspecting running examples of, 715 processes with, 14-15 granting, 718-724 PSQL language extensions, overview of, granting in PSQL, 570 567 granting right for granting of, 726-728 PSQL modules granting to all users, 724 defining, 575 granting to objects, 727 limits on, 949 granting to UNIX groups, 723-724 PSQL procedure language lists of, 716, 722 cursorsin,614-615 multiple privileges and grantees, eventsin,569-570 722-724 exception handlers in, 569
1076 Index
exception handling in, 545 -r[ecords] switch, using with gstat, 331, expressions in, 417 341-342 language elements for, 577-579 -r[eplace_database] restore switch in gbak, overview of, 351 effect of, 824 response to exceptions by, 666 -r[ole] rolename command-line switch for restrictions on, 568-569 isql, description of, 809 security in, 570 -r[ollback] {ID I all} switch in gfix, purpose significance of, 91 of, 851 statement types not supported in, RAM (random access memory) 568-569 calculating requirements for, 243 for triggers, 645-652 relationship to calculating cache size, PUBLIC privilege 242 granting, 724 system requirements for, 3 revoking, 732 RAS AutoDial, disabling on Windows, 921 PUBLIC user, significance of, 718. See also RDB$ prefix, significance of, 71, 208 special users; users RDB$CHARACTER_SETS system table, Python extension package, features of, 931 overview of, 957-958 RDB$CHECK_ CONSTRAlNTS system Q table, overview of, 958 RDB$COLLATIONS system table, overview -q[uiet] command-line switch for isql, of, 959 description of, 809 RDB$DATABASE system table q[uit] command in gsec, example of, 704 overview of, 959 QA testers' lab forum, web address for, significance of, 131, 363 1017 RDB$DB_KEY system table qli command-line tool benefits of, 635-638 default location for, 23, 25, 26 changing scope of duration for, 638 inspecting BLR statements with, 454 and insert operations, 637-638 performing recovery with, 936 with multi-table sets, 639 queries. See also complex queries; DML scope of, 638 queries; multi-table queries size of, 634-635 calling stored procedures with, 379-380 speeding up query performance with, characteristics of, 353 634 counting rows with, 368-370 RDB$DEPENDENCIES system table, limits on, 948 overview of, 960 with multiple plans, 461-462 RDB$EXCEPTIONS system table, overview optimizing with RDB$DB_KEY, 635-636 of, 960 using DDL with, 349 RDB$FIELDDIMENSIONS system table, query optimizer. See optimizer overview of, 961 query plans. See also multiple plans; plan RDB$FIELDS system table, overview of, expressions 961-964 features of, 450-451 RDB$FILES system table, overview of, 964 improving, 463-466 RDB$FILTERS system table, overview of, inspecting with isql, 455-457 965 relationship to indexes, 216-217, 317 RDB$FORMATS system table, overview of, specifying, 462-463 965 using CROSS JOINs with, 457-458 RDB$FUNCTION_ARGUMENTS system using for views, 497-498 table, overview of, 966 quit interactive command in gsec, effect RDB$FUNCTIONS system table, overview of, 701 of, 967 QUIT isql command, effect of, 792 RDB$GENERATORS system table, -quit switch for fbmgr/ibmgr, description overview of, 967 of, 57 RDB$1NDEX_SEGMENTS system table, overview of, 968 R RDB$INDICES system table, overview of, r (reduction) factor, calculating for cache 968-969 size, 242 RDB$PAGES system table, overview of, 969 -r switch for Lock Print reports, RDB$PROCEDURE_PARAMETERS system description of, 860 table, overview of, 970
1077 Index
RDB$PROCEDURES system table record versions, significance of, 529-530 contents of, 599 recordsets overview of, 970-971 as input sets, 355-356 RDB$REF_CONSTRAINTS system table, relationship to DML queries, 353-354 overview of, 971 recovery process RDB$RELATION_CONSTRAINTS system cleaning and recovery, 935 table, overview of, 971-972 getting exclusive access, 933-934 RDB$RELATION_FIELDS system table, making a working flle copy, 934 overview of, 972-973 mending corrupted pages, 935 RDB$RELATIONS system table, overview perforrning validation, 934 of, 973-974 prompting for, 848 RDB$ROLES system table restoring cleaned backup as new overview of, 975 database, 936 querying, 623 validating after -mend, 935 RDB$SECURITY_CLASSES system table, validating restored databases, 936 overview of, 975 RECREATE PROCEDURE statements, RDB$TRANSACTIONS system table, changing stored procedures with, 629, overview of, 975 631 RDB$TRIGGER_MESSAGES system table, RECREATE TABLE Statements, syntax for, overview of, 976 295 RDB$TRIGGERS system table recursive procedures. See also executable contents of, 599 procedures; procedures; selectable overview of, 976 stored procedures; stored procedures RDB$TYPES system table calling, 613 overview of, 977 characteristics of, 612-613 relationship to aliases, 169 Red Hat operating system, requirements RDB$USER_PR1VILEGES system table for, 6 overview of, 977-978 re-entrant JOINs, using with multi-table querying, 622-624 queries, 441-443 RDBMSs (relational database re-entrant subqueries, searching with, 446 management systems). See also re-entrant UNION queries, applying, databases; multi-flle databases; 449-450. See also UNION queries single-file databases reference, passing parameters by, 763 Firebird as, 207 HEFERENCES privilege. See also privileges and "hands-off" data access, 83 access granted by, 715 primary keys in, 82 granting on columns, 720 relationships in, 82-83 overview of, 306 READ COMMITTED isolation level and views, 722 description of, 523 referential constraints using with table reservation, 527 characteristics of, 269-270 READ ONLY transactions, capabilities of, implementing, 299-301 525 storing actions for, 971 READ UNCOMMITTED isolation level, REFERENTIAL_CONSTRAINTS system description of, 523 view, example of, 979 READ WRITE transactions, capabilities of, Registry key, seeking in Windows, 5Q-51 525 Rejects entry in lock header block, "Reading a Lock Print" paper, accessing, explanation of, 863 855 Relation resource lock, overview of, read-only databases 871-872 creating, 4, 24 7 relationallink, diagram of, 213 and external flies, 246 relationships in RDBMSs significance of, 246 mandatory relationships, 312 read-only transactions, purpose of, 513 many-to-many relationships, 308-310 read-only views. See also system views; one-to-many relationships, 298 updateable views; views one-to-one relationships, 307 characteristics of, 493 purpose of, 82-83 making updateable, 493-495 self-referencing relationships, 31Q-311 read-write databases, significance of, 246 RELEASESAVEPOINT Statements, reassign_sales exception, handling, example of, 544 671-673
1078 Index remote backups, performing with gbak, restore operations 821-822. See also backups; gbak advisory about performance of, 287 command-line tool allowing user logins during, 258 remote dient installation example of, 829-830 on Linux/UNIX, 102-103 multiple files from multiple files, 827 overview of, 101 multiple-file restores, 825-827 remote clients, running interactive isql page size and default cache size from, 779 considerations, 827-828 RemoteAuxPort parameter, description of, running with gbak, 822-828 750 to single files, 825 RemoteBindAddress parameter, and user-defined objects, 825 description of, 53, 751 restore rights in gbak, significance of, 816 RemoteFileOpenAbility parameter, restore switches, overview of, 823-824 description of, 751 restore tasks, examples of, 814-815 RemotePipeName parameter, description restriet action, relationship to action of, 756 triggers, 302 RemoteServiceName and Restriet setting, using with Firebird 1.5 RemoteServicePort parameters databases, 231 configuring, 41 RETAlN option, using with COMMIT significance of, 37, 39, 750 statements, 546-547 RemoteServicePort parameter, description retrieval plans, computation by optimizer, of, 750 450-451 Remave node entry in lock header block, return values explanation of, 864 receiving in nested procedures, 624 repair tools, IBSurgeon, 940-941 specifying for UDFs, 764 REPEATAHLE READ isolation level RETURNING_ VALUES clause description of, 523 using with executable procedures, 607 using with table reservation, 527 using with nested procedures, 624 replaceable parameters, purpose of, RETURNS clause, using with selectable 380-381 stored procedures, 379 reports, printing with Lock Manager, REVOKE GRANT OPTION statement, 859-860 example of, 733 REQUEST BLOCK entry, explanation of, REVOKE statements 875 advisory about, 728 request blocks, overview of, 87 4-877 example of, 729-731 Request timed out message, triggering, 43 using with permissions, 728 requests, effect of, 570 REVOKING ALL privilege, example of, 730 Requests entry RI action clauses, relationship to DML in lock blocks, 871 operations, 383 in owner blocks, 867 RI (referential integrity). See also custom reserved words, overview of, 1011-1014 RI RESERVING clause explanation of, 216 versus table-levellocking, 553 implementing without constraints, using to start transactions, 536 655-656 resource blocks in Lock Manager preserving, 657 entries for, 870-871 significance of, 297-298 overview of, 867-877 support for, 655 resource use in Classic server versus syntax pattern for, 300 Superserver, 741 RIGHT OUTER JOINs, using with multi• resource-related parameters table queries, 437 cpu_affinity, 746 rights, granting for granting privileges, CpuAffinityMask, 746 726-728 database_cache_pages, 747-748 rivers. See also streams DefaultDbCachePages, 747 relationship to JOINs, 454-455 EventMemSize, 7 48 relationship to output sets, 356 SortMemßlockSize, 7 48 role definitions, storing, 975 SortMemUpperLimit, 748 -role name switch for gbak backups, effect resources, recommended reading, of, 819 1015-1016. See also websites ROLE privilege, access granted by, 715
1079 Index
role privileges, assigning, 725 script errors, occurrence of, 597 role users, revoking privileges from, 732 script flles, creating, 224 roles scripts. See also DDL scripts; manual attaching to databases under, 725 scripting creating, 724 beneflts of, 788 dropping, 726 building employee database from, granting to users, 725 943-944 versus groups, 716 chaining, 229 privileges through, 724-726 committing statements in, 226-227 relationship to privileges, 716 executing, 225, 227 revoking privileges from, 731 guidelines for use of, 221 support for, 93 managing, 227-230 as users, 717 overview of, 220 rollback, relationship to MGA, 509 sample suite of, 229 ROLLBACK Statements, using with using master script approach, 229-230 transactions, 547-548 -se[rvice] Servicename restore switch in rolled-back transactions, significance of, gbak, using, 819, 824 514 search conditions, using with expressions, root directory, detecting, 50-51 414-415 root user, advisory about, 21 search criteria, managing in multi-column RootDirectory parameter, description of, indexes, 324 51, 743 searched update, explanation of, 374-375 row locking, relationship to MGA, 510-511 searching, performing with subqueries, ROW_COUNT context variable, 446 description of, 115 seconds, storing fractions of, 143 rows securable fllesystems, using, 689-690 counting with queries, 368-370 security. See also database security; updating in tables, 660 physical security; server security running processes, inspecting, 14 and access defaults, 713-715 running totals, procedure for, 625-627 of BLOBs, 186 runtime columns, using in UNIONs, inPSQL, 570 448-449 and UDFs (user-deflned functions), 425 runtime exception messaging, overview of, security access versus database security, 675-676 232-233 runtime output, constants and variables security database, features of, 706-707 as,408-409 security scripts creating, 733-736 s features of, 733 security.fbk flle, default location for, 23, 24 -s[ql_dialect] n command-line switch for security.fdb database isql, description of, 809 contents of, 93 -s[ql_dialect] switch in gflx, example of, default location for, 23, 24 843 signiflcance of, 697, 706 -s[weep] switch in gflx, purpose of, 851 segmented indexes, using, 323 -s
1080 Index
defining Iist of columns with, 360-362 Series 8: Shadow resource lock, overview formof, 358 of, 874 nesting, 619-620 Series entry for lock blocks, explanation using on multiple rows, 588-590 of, 870 using with external tables, 284-286 series of resource locks, symbols and types SELECT ... INTO statements associated with, 868-869 description of, 579 server and dient versions, advisory about using, 587-590 mixing of, 96 using with DELETE_EMPLOYEE server code modules, overview of, 563-564 executable procedure, 608-609 Server Control applet, displaying on SELECT ... WITH LOCK dause, effect of, Windows 2000 Server, 15-16 556--558 server installations selectable stored procedures. See also disk space requirement for, 4 executable procedures; procedures; for Windows kits, 12 recursive procedures; stored server machine, purpose of sort space on, procedures 48-49 calling, 620-621 server memory, requirements for, 3-4 encountering errors in cursor loop of, server name and path, overview of, 34-36 670 server protection, entering user example of, 379-380, 499-500 credentials for, 697-699 explanation of, 92, 601 server role, relationship to transactions, operations in, 618 507 technique for, 617-618 server security, implementing, 93. See also uses for, 615-617 database security; physical security
1081 Index
SET AUTODDL command, effect of, 801 using CONDITIONAL attribute with, SET BLOßDISPLAY command, effect of, 250,253 801-802 shared read lock state, significance of, 856 SET clause, using with UPDATE SHARED READ option, using with table statements, 375-376 reservation, 528 SET commands, purpose of, 801 shared write lock state, significance of, 857 SET COUNT command, effect of, 802 SHARED WRITE option, using with table SET DEFAULT action trigger, description reservation, 528 of, 303 SharpDevelop, web address for, 925 SET ECHO commands SHELL isql command, effect of, 792 controlling commands with, 791 SHOW CHECK command, effect of, 793 effect of, 803 SHOW commands, using with isql, 785, SET NAMES command, effect of, 803 792 SET NULL action trigger, description of, SHOW DATABASE command 302 effect of, 793 SET PLAN command example of, 237 effect of, 804 SHOW DOMAIN[S] command, effect of, inspecting plans with, 455 794 SET PLANONLY command SHOW EXCEPTION[S] command, effect of, effect of, 804 794 inspecting plans with, 456-457 SHOW FUNCTION[S] command, effect of, SET SQL DlALECT command, effect of, 795 804 SHOW GENERATOR[S] command, effect SET STATISTICS statements, recomputing of, 795 index selectivity with, 329 SHOWGRANT command, effect of, 796 SET STATS command SHOW INDEX (SHOW INDICES) effect of, 805 command, effect of, 324, 796 inspecting plans with, 456 SHOW PROCEDURES command SET TERM command, effect of, 806 effect of, 797 SET TERM syntax using, 599 setting external terminators with, 574 SHOW ROLE[S] command, effect of, 798 using with stored procedures, 605-606 SHOW SQL DlALECT command, effect of, SET TIME command, effect of, 806 798 SET WARNINGS command, effect of, 807 -show switch for fbmgr/ibmgr, description sets ofdata of, 57 cursor sets, 356-357 SHOW SYSTEM command, effect of, 798 input sets, 354-355 SHOWTABLE[S] command, effect of, 799 nested sets, 357-358 SHOWTRIGGER(S] command, effect of, output sets, 353-354 599, 799-800 relationship to DML queries, 353 SHOWVERSION command, effect of, 800 -sh[ut] switch in gfix, purpose of, 852 SHOWVIEW[S] command, effect of, shadowftles 800-801 explanation of, 249 -shut switch storing volume details of, 964 in fbmgr/ibmgr, 56-57 shadow options, overview of, 249-250 in gfu, using, 840-841 Shadow resource lock, overview of, 87 4 shutdown state, accessing databases in, shadow set, explanation of, 249 841 shadowing shutdowns, terminating, 841 versus backing up, 248 single quotes ('), using with dialect 3 benefits and limitations of, 248-249 databases, 234 implementing, 249-250 single-column indexes versus compound significance of, 247-248 indexes, 465 shadows single-file databases. See also databases; activating and dropping with gfu, multi-file databases; RDBMSs 849-850 (relational database management creating, 250-253 systems) dropping, 253-254 backing up to multiple targets, 821 increasing size of, 253 estimating size of, 242 single-ftle versus multi-file versions of, restoring to, 825 250 specifying flle size for, 238
1082 Index single-file shadows, creating, 251 source argument for gbak -b[ackup], singleton SELECT Statements description of, 818 example of, 588 source of data, specifying with FROM variable values from, 593 clauses, 362-363 single-user model, using with Firebird SourceForge servers, 88-89 displaying Linux kits on, 9 SINGULAR() predicate, overview of, 403 displaying Windows kits in, 11 Size entry for lock blocks, explanation of, mirror site selector in, 8 870 special character sets, overview of, SKIP (n) keyword, using with SELECT 174-175 Statements, 360 special users, significance of, 718. See also slash (/), using with Windows connection PUBLIC user; users strings, 40 Spin count entry in lock header block, sliding century window algorithm, explanation of, 864 interpreting two-digit year values spreadsheet mind-set, shedding, 81 with, 146 SQL dialects SMALUNT data type casting between date/time types in, limits of, 127-129 153-155 minimum length for character type of, changing column and domain 121 definitions in, 121 SMONTH variable, testing, 585 changing with gfiX, 843 SMP, support for, 5 and converted databases, 134 SNAPSHOT isolation Ievel creating databases in, 233-234 description of, 523 and DATA type, 143 using with table reservation, 527 and date/time context variables, 150 SNAPSHOT TABLE STABILITY isolation determining, 126 Ievel differences between, 124-125 advisory about using with table and expressions as operands, 152 reservation, 527 features of, 114 overview of, 524-525 and Firebird databases, 123 .so library, standard size of, 95 and formats for date literals, 146 Solaris operating system, requirements for, and implicit type conversion, 119-120 6 and implicit type-casting of date/time SOME() predicate, overview of, 403 literals, 149-150 SOME predicator, purpose of, 400 and ODS (on-disk structure), 123 sort criteria, collation sequences in, 177 and operations using date and time sort direction, determining, 473 values, 151 sort memory, size of, 468 overview of, 351 sort merge, performing with optimizer, performing addition and subtraction 454 on fixed types in, 138 SORT method, effect of, 469 performing division on fixed types in, sort space. See also temporary sort space 135-138 on disk, 468 performing multiplication on fixed purpose on server machine, 48-49 typesin, 138 sorting setting in isql, 786-787 by columns, 4 70 significance of, 124-125 by degree number, 471-473 storing numeric data values in, 140 by expressions, 4 70-4 71 and TIME data type, 143-144 withindexes,317-318 SQL expressions. See expressions performing on number types, 128 .sql extension, adding to Firebird script on procedure or function expressions, files, 597 471 SQL functions "sorting by index," significance of, 460 AVG() function, 418 sorting clauses, presentation order of, 467 CAST() function, 418-419 SortMemBlockSize parameter, description COUNT() function, 418 of, 53,748 EXTRACTO function, 418-420 SortMemUpperLimit parameter, GEN_ID() function, 418, 422-423 description of, 53, 748 MAXO function, 418 source, deleting from modules, 599-600 MINO function, 418 SUBSTRINGO function, 418, 420-421
1083 Index
SUMO function, 418 statement-levellocking, overview of, UPPERO function, 418, 421-422 553-558 SQL logic, advisory about, 405 statements SQL operators. See also arithmetic comrnitting in scripts, 226-227 Operators creating fields in, 407-409 arithmetic operators, 394 static reports, printing with Lock Manager, comparison operators, 394-396 860 concatenation operator, 393 static rows, storing as lookup tables, existential predicates, 400-403 304-306 IS [NOT] NULL predicate, 399-400 static SQL logical operators, 398-399 versus dynamic SQL, 350 precedence of, 393 and restrictions for data types, 135 SQL permissions, storing, 977-978 significance of, 99 SQL resources, 352 stored procedures. See also executable SQL script files, creating, 225-226 procedures; procedures; recursive SQL standard, significance of, 347 procedures; selectable stored SQL statements procedures including in DDL scripts, 221 benefits of, 565 purpose of, 34 7 body elements for, 576 syntaxes for, 348 body elements in, 603-606 using to start transactions, 536-538 calling with queries, 379-380 using with isql command-line utility, changing, 629-633 69-70 compiling,597-599 SQL (Structured Query Language). See also creating, 602-606 Firebird SQL dropping,633-639 and ARRAY types, 186 effect of, 570 dynamic versus static SQL, 350 and events, 678 user credentials in, 699 extensions for, 577-579 using views in, 496-497 features of, 558 SQL support, accessing, 352 header elements for, 576, 602-603 -sql[_dialect] n switch in gfix, purpose of, main code block in, 604-606 852 managing, 596 SQLCODE context variable overview of, 91-92 description of, 116 purpose of, 601 relationship to exception handling, 670 relationship to PSQL, 351 trapping numeric error codes in, relationship to triggers, 217 673-674 storing definitions of, 970-971 values and definitions of, 549 storing parameters for, 970 SQLCODE error codes, overview of, uses for, 564-565 981-1009 using event alerters in, 684 SQLERROR message, interpretation of, 549 using EXECUTE privilege with, 721 SQLWARNING message, interpretation of, using POST_EVENT statements with, 549 685 SQL-89 inner join, syntax for, 363, 433-434 using with RDB$DB_KEY, 637-638 SQL-92 delimited identifiers, overview of, viewing arrays through, 627-629 114-115, 218-219 streams. See also rivers SQL-92 explicit INNER JOIN, syntax for, bitmapping, 454 434-435 merging in LEFT JOINs, 436 SS date literal, description of, 145 navigation by optimizer, 459-460 stand-alone server model, using with relationship to joining, 432, 434-435 Firebird servers, 88 relationship to optimizer, 453 -start switch for fbmgr/ibmgr, description relationship to output sets, 356 of, 57 string and character functions, summary STARTING WITH comparison predicator, of, 898-904 purpose of, 396, 398 string argument sizes for UDFs, State entry significance of, 428-429 in lock blocks, 870 string comparisons in request blocks, 875 collation sequences for, 177 statement terminator, relationship to performing on number types, 128 procedures and triggers, 573-575 string delimiter, example of, 161-162
1084 Index string input, accepting in BLOB columns, SuSE operating system, requirements for, 185 6 string literals, interpreting, 172 SUSPEND statements string overflow, significance of, 393 advisory about using with executable string types, lirnitations of, 378 procedures, 671 strings description of, 579 concatenating, 162 purpose of, 590 returning as numbered rows, 616-617 using with stored procedures, 611-612 storing in variable-length types, 165 sweep interval setting, significance of, storing non-printable characters in, 162 837-838 subqueries. See also embedded subqueries sweeping avoiding use of, 445-446 disabling automatic sweeping, 838 characteristics of, 443 versus garbage collection, 517-518 in expressions, 392 and GC (garbage collection), 837 inserting with, 446-44 7 performing manually, 839 versus JOINs, 444-446 significance of, 255, 837 relationship to nested sets, 357 switches searching with, 446 for tbmgr/ibmgr, 55, 57 specifying columns with, 443-446 for gbak, 818-819, 823 using with embedded aggregations, forgfix,842-843,850-852 480-481 for gsec, 702 using with multi-table queries, 432 for gstat, 331, 339-341 sub-script ranges, specifying for array for isql command-line options, dimensions, 188 808-809 SUBSTRING() function for Lock Print reports, 859-860 purpose of, 418 using with gstat command-line tool, using, 420-421 330-331 subtraction (-) operator, precedence of, synchronous listening 394 performing by means of API, 683 subtraction, performing on fixed types, relationship to events, 681-682 138 synchronous writes SUCCESS message, interpretation of, 549 disabling, 257-258 SUMO function enabling and disabling, 844-845 description of, 423 setting with gfix, 836 example of, 365 significance of, 237-238 purpose of, 418, 475 SYS_USER_NAME column in USERS table, Superserver. See also POSIX Superserver gsec option for, 702 versus Classic server architecture, SYSDBAuser 739-741 changing password for, 19 connecting to, 36 and maintenance of security database, connections to, 3 698 default cache allocation for, 241 privileges assigned to, 19, 93, 207 effect of requests on, 571 significance of, 699 executable and processes in, 7 40 special rights granted to, 718 initializing and restarting manually, 62 SYSDBA.password file, default location for, local access method in, 741 23 lock management in, 741 system directory, installing Windows Lock Manager in, 856 clients in, 107-108 memory used by, 85 system requirements resource use in, 741 installation drives, 4 running on Windows, 59-61 server memory, 3-4 starting and stopping on Linux/UNIX, System Restore feature on Windows 55-56 ME/XP, advisory about, 845 stopping, 64 -system switch, using with gstat, 331-332 threading issues in, 765 system tables troubleshooting, 917 modifying, 257 surrogate keys setting access management for, 714 versus natural keys, 215 significance of, 208 purpose of, 213-214 vulnerability of, 713 relationship to primary keys, 273-27 4
1085 Index
system views, overview of, 978-979. See storing TIDs in, 541 also read-only views; updateable updating rows in, 660 views; views updating with triggers, 652-660 using external flies as, 281-287 T tarball kits, using, 10 target argument for gbak -b[ackup], -t switch description of, 818 example of, 849 TCB (trusted code base), signiflcance of, for Lock Print reports, 860 693 -t table_list switch, using with gstat, 331 TcoNoNagle parameter, availability of, 752 -t[erminator] x command-line switch for tcp_no_nagle parameter, description of, isql, description of, 809 752 -t[ransportable] switch for gbak backups, TCP/IP connection strings, elements of, 34 effect of, 819 TCP /IP connections, syntax for, 40 -t[wo_phase] {ID lall} switch in gfix, TCP /IP localloopback, providing local purpose of, 852 access by means of, 30 table aliases. See also aliases; database TCP /IP port service path aliases configuring, 36-42 relationship to sorting, 470 syntax for, 38 substituting table identifiers with, 364 TcpRemoteBufferSize parameter, using in multi-table queries, 439-440 description of, 751 using with predicates, 403 TDataset-based components, features of, table data, maintenance of, 211 927-928 table identifler, significance of, 262 tech support, web address for, 1017 table locking mode, support for, 526 TempDirectories parameter, description table reservation of, 52,745 configuring, 529 temporary sort space. See also sort space parameters for, 527-528 parameters for configuration of, purposes of, 526-527 744-745 uses for, 527 significance of, 468 TABLE STABILITY isolation Ievel, temporary tables, unavailability of, explanation of, 553 295-296. See also self-referencing TABLE STABILITY transactions, tables; tables relationship to SNAPSHOT TABLE terminal servers, relationship to Firebird STABILITY isolation Ievel, 524 servers, 90-91 TABLE_CONSTRAINTS system view, terminator character, changing, 783 example of, 979 terminator symbols (;), including in DDL table-levellocking scripts, 223-224 overview of, 553 third-party tools for Firebird, resources for, relationship to MGA, 511 ' 942 tables. See also self-referencing tables; ThisTransaction, reading tables reserved temporary tables by, 528 adding columns to, 291-292 TIDs (transaction IDs) adding primary keys to, 277 accessing, 540-541 altering, 287-294 signiflcance of, 512-513 characteristics of, 261 storing in tables, 541 creating, 262 using in applications, 541 defining columns in, 263-269 time and date functions, summary of, dropping,294-295 890-898 exporting to external flies, 286 time context variables, examples of, 150 granting privileges on, 722 TIME data type, overview of, 143-144 importing external flies to, 284-286 time elapsed, advisory about storage of, joining with views, 486-487 144 Iimits on, 947 time literals modifying columns in, 288-289 implicit type-casting of, 149-150 ownership and privileges of, 262 recognized formats for, 144-148 re-creating, 295 TIME operand, result of, 151 relationship to columns, 118 TIME strings, extracting, 158 row limitations of, 211 Time to Backup tool, features of, 940 as sets of data, 353
1086 Index time values, using operations with, strengthening precedence of, 527 150-152 tracking across databases, 975 time/ date types, casting between, 153 and triggers, 566-567 TIMESTAMP data type using auto-undo log with, 540 casting in dialect 3, 154 using COMMIT statements with, 546 overview of, 143 using lock resolution mode with, result of, 151 525-529 tmp_directory parameter, description of, using ROLLBACK Statements with, 52, 745-746 547-548 'TODAY data literal, effect of, 118, 148 transformations, using triggers with, "token unknown'' error, generating, 196 649-650 'TOMORROW' date literal transliteration errors effect of, 118 generating for character sets, 166 meaning of, 149 reporting and fixing, 172-173 tools for Firebird, resources for, 942 transportable backups, performing with top command, stopping Firebird gbak,819-820 processes with, 59 tree structures topologies for Firebird servers implementing in self-referencing single-user model, 88-89 tables, 660 two-tier client/server model, 87-88 role in self-referencing relationships, TPB (transaction parameter buffer), 311 significance of, 539-540 trigger attributes, overview of, 645 TPM (transaction processing monitor), trigger body role in Firebird servers in DTP changing, 662 environments, 89-90 components of, 645 -tr[an] n switch in gfix, purpose of, 852 and header, 643 transaction aging, overview of, 512-518 trigger definitions, altering, 598 transaction behavior, optimizing, 559-560 trigger header transaction handle, significance of, 539 and body, 643 transaction recovery, performing with gfix, changing,661-662 847-849 trigger message definitions, storing, 976 Transaction resource lock, overview of, triggers. See also action triggers; BEFORE 872-873 triggers; custom triggers transaction server frameworks, overview adding conditioned logic to, 384 of, 90 adding to enforce integrity rules, 659 transaction settings, interaction with auto-stamping with, 651-652 explicit locks, 556 benefits of, 566 transaction statistics, significance of, body elements for, 576 518-519. See also OAT (OldestActive changing,661-663 Transaction); OIT (Oldest Interesting compiling, 597-599 Transaction) creating, 643-645 transactions. See also explicit transaction cross-referencing for CHECK and NOT control; multi-database transactions; NULL constraints, 958 user savepoints and default values, 650-651 access modes for, 525 defining for views, 495 ACID properties of, 506 deleting source for, 600 context of, 507-508 dropping, 663 ending, 546 effect of, 570 examining, 545 elements of, 573-579 interaction of applications with, 542 enforcing mandatory relationships in isql command-line utility, 784-785 with, 653-655 language of, 535-536 and event variables, 646 and MGA (multi-generational and events, 678 architecture), 508-511 exceptions in, 674-675 and owner blocks in Lock Manager, 865 extensions for, 577-579 progress of, 541-542 features of, 558 requests associated with, 507-508 granting ALL privilege to, 722 significance of, 83-84 header elements for, 576, 644-645 starting with API functions, 538-540 identifying phase and event in, 644 starting with SQL statements, 536-538 listing with dependencies, 599
1087 Index
managing, 596 u naming, 644 -u[se] {reserve I full} switch in gfix, overview of, 92, 565-566, 641 example of, 844 phase and event related to, 641-642 -u[ser] name switch in gbak, effect of, 819, phase indicators for, 645 824 relationship to stored procedures, 217 -u[ser] user command-line switch for isql, and RI (referential integrity) support, description of, 809 655-660 UDF libraries, linking to, 425 for runtime exception messaging, 676 UDF library scripts, overview of, 427-428 sequence related to, 642-643 UDFAccess parameter, description of, 52, special PSQL for, 645-652 772-773 status of, 643, 645 UDFs (user-defined functions) storage of, 566 accepting BLOB parameters in, 764 storing definitions of, 976 accessing, 424 and transactions, 566-567 accessing in public domain, 763 . updating tables with, 652-660 adding to existing external funct10n as users, 717 modules, 767 using auto-incrementing keys with, calling conventions for, 765 647-648 and character data types, 764 using event alerters in, 684 compiling and linking, 767 using EXECUTE privilege wi~, ~21 configuration and security issues using for phase/ event combmatiOns, pertaining to, 425 385 creating, 762 using NEW and OLD context variables declaring to databases, 426-429 with,587 design considerations for, 424 using POST_EVENT statements with, developing, 762-769 685 existing libraries of, 425 using transformations with, 649-650 and function identifiers, 428 and validation, 650 grouping by, 4 78 trigonometric functions, summary of, making leakproof, 766 909-913 overview of, 92, 424-429, 761 troubleshooting. See also error messages path names in function declarations automatic Internet dialup on Windows, for, 429 920-921 specifying return values for, 764 Classic server, 917 stability of, 426 database connections, 915-917 storing information about, 967 gds_db port service, 917 string argument sizes for, 428-429 port3050,917,919 threading issues associated with, servers, 917 765-766 Superserver, 917 using NULL with, 405-406 true and false, resolving with SQL using with custom character sets, 179 assertions, 405 UIB components, features of, 928-92~ truth evaluation of predicates, example of, UID column in USERS table, gsec opt10n 390-391 for, 702 truth testers, relationship to predicates, UID entry in owner blocks, explanation of, 389 867 TSB (transaction state bitmap), "Unable to complete network request relationship to OIT and OAT, 515-516 host" error message, troubleshooting, two-digit year values, interpreting with 918-920 sliding century window algorithm, UNC notation 146 using with Windows host servers and two-phase commit, relationship to NetBEUI clients, 65-66 transactions, 848 using with WNet connections, 40-41 two-phase recovery, automating with gfix, undateable cursors, purpose of, 614-615 849 UNICODE_FSS special character set, two-tier client/server model qualities of, 17 4 characteristics of, 78 UNION ALL operators, using, 450 using with Firebird servers, 87-88 UNION clause, using with SELECT statements, 366-367
1088 Index
UNION operator, purpose of, 447 uppercase delimited identifiers, case• UNION queries. See also re-entrant insensitivity of, 219 UNION queries UQ abbreviation, explanation of, 957 using with multiple tables, 432 -use {reserve I full} switch in gfix, purpose using runtime columns in, 448-449 of, 852 UNIONsets "use all space," disabling, 844 ordering, 472 -use switch, restoring read-only databases search and ordering conditions for, 449 with, 247 UNION -compatible sets, overview of, -use_[all_space] restore switch in gbak, 447-448 effect of, 824 UNIQUE constraints, using, 280 Used entry in lock header block, UNIQUE KEYconstraints, dropping, explanation of, 862 290-291 USER context variable, description of, 116 UNIQUE keyword, using witb CREATE user credentials INDEX statements, 321-322 entering for server protection, 697-699 uniqueness, dispelling tbeoretical in POSIX, 700 assumptions about, 273 in SQL, 699 UNIX usernames configuration of inetd and xinetd case sensitivity and character daemons on, 38-39 limitations of, 698 embedded server applications on, 100 determining witb gbak, 817 installing Firebird 1.0.3 on, 25 in gbak, 817 installing Firebird 1.5 on, 22-23 user privileges, using witb views, 488 locating HOSTS file in, 33 user savepoints. See also explicit locating services flle in, 42 transaction control; multi-database names and default locations of Firebird transactions; transactions clients for, 109 features of, 559 running Firebird on, 55-59 internal savepoints, 544 settingenvironmentvariables in, 47 purpose of, 543-545 using Classic server witb, 58-59 releasing, 543-544 UNIX clients, installing, 102-103 rolling back to, 543 UNIXgroups using nested exceptions as, 671 granting privileges to, 723-724 user security, customizing, 706 relationship to privileges, 716 -user switch for tbmgr/ibmgr, description UNIX servers, connecting to, 69-70 of, 57 unnamed cursors, syntax for, 356 -user username "Unofficial InterBase Site," web address in gfix, 852 for, 1016 in gstat, 331 UPDATE privilege USER_NAME column in USERS table, gsec access granted by, 715 option for, 702 granting on columns, 719-720 user-defined indexes, characteristics of, revoking, 729 316 UPDATE statements users. See also PUBLIC user; special users overview of, 374 adding to groups, 21 using, 375-378 granting privileges to, 723 using = assignment symbol witb, 406 granting roles to, 725 and value switching, 376-377 permitting to change passwords, updateable views. See also read-only 707-708 views; system views; views types of, 717 changing behavior of, 496 users list, hiding, 708-709 characteristics of, 495 USERS table updates, advisory about, 555 relationship to gsec options, 701-702 UPDATING Boolean context variables, using for authentication, 706 using with triggers, 646 UPDATING context variable, description V of, 116 UPPER() function -v switch in gfix, example of, 847 purpose of, 418 -v[alidate] switch in gfix, purpose of, 852 using, 421-422 -v[erbose] switch in gbak, effect of, 819, 824
1089 Index
validation as users, 717 performing, 256-257 using in SQL, 496-497 performing with triggers, 650 using query plans for, 497-498 VALUE keyword, using with CHECK using SELECT specification with 491 constraints and domains, 195-196 Visual Basic forum, website for, 101S values. See also default values volume details, storing for secondary and assigning to variables, 583-584 shadow files, 964 setting to NULL, 406 VARCHAR types w casting to from DATE/TIME types, 153-154 -w switch for Lock Print reports, explanation of, 165 description of, 860 using with external files, 283 -w[rite] {sync I async} switch in gfix VARIABLE keyword, using with stored example of, 844 procedures, 604 purpose of, 852 variable values WAIT option of lock resolution mode, from multi-row SELECT statements, purpose of, 525-526 593-594 warnings, issuing with isql, 785 from singleton SELECT statements 593 web applications, protecting, 694-695 variable=expression statement, ' websites. See also resources description of, 577 admin tools, 21 variable-length character types ADODB classes, 930-931 byte limitation of, 161 Advanced Data Generator tool, 941 overview of, 164-165 Apache Web Server, 930 variables. See also local variables aspxDelphi.net PORTAL & STORE, 926 and assignment Statements, 583-584 ''An Auditahle Series of Numbers" Tech and domains, 583 Info sheet, 132 and input arguments, 586 Blaze~op graphical admin desktop, 938 and output arguments, 586-587 Contnbuted Downloads pages, 67 types of, 582-583 Control Panel applets, 17 using as runtime output, 408-409 Database Workbench graphical admin Version entry in lock header block, desktop, 937 explanation of, 862 DBak backup tool, 940 version numbers, including in installation DBI drivers, 931 kits, 7 DBXpress drivers, 929 Easysoft ODBC driver, 925 ~ew column names, specifying, 489-490 Eclipse, 930-931 ~ew definitions, modifying, 496 VIew name, purpose of, 489 exSQL, 930 view specifications fbintl2 plug-in for custom character examples of, 486-487 sets, 179 usingWITH CHECK OPTION with, FIBPlus components, 928 492-493 Firebird, 6 views. See also read-onlyviews; system Firebird CFS browser, 676 views; updateable views Firebird forums, 1017-1019 .NET Provider resources 926 bug in Firebird l.O.x, 499 Firebird driver, 924' creating, 489-493 Firebird ODBC/JDBC defining COMPUTED columns for, 491 Firebird resources, 1016-1017 352 defining triggers for, 495 firebird-support forum, dropping, 496 gbak BackupRunner, 940 and grouping, 485 Gemini ODBC driver, 925 joining tables with, 486 Gentle.NET, 926 manager, and privileges, 487-488 Grant Manager permission privileges on, 722 941 purpose of, 485 Grant Master permission manager, 941 returning columns with, 486 graphical admin desktops, 937 and row ordering, 485 "HardeningWindows 2000" lab significance of, 217 presentation, 691 unavailability of keys and indexes to, IB objects, 927-928 485 IB_SQL graphical admin desktop, 939 usefulness of, 487 IBAcce~s graph~cal admin desktop, 938 IBAdmm graph1cal admin desktop, 938
1090 Index
IBExpert graphical admin desktop, 938 Windows IBOAdmin components, 930 connection strings for, 40 IBOConsole graphical adrnin desktop, embedded server applications on, 100 939 locating ROSTS file in, 33 IBOConsole utility, 331 locating services flle in, 42 IBPhoenix, 10 names and default locations of Firebird IBPP for C++ Development, 927 clients for, 109-110 IBProvider driver, 90 running Firebird servers on, 59-64 IBSurgeon database repair tools, 941 setting environment variables in, 45-46 implementing security on Windows troubleshooting automatic Internet servers, 692 dialup on, 920-921 Interbase Datapump tool, 941 Windows 32-bit platforms InterBaseExpress components, 929 installing Firebird 1.0.3 on, 26 JayBird JDBC drivers, 923 installing Firebird 1.5 on, 23-25 LLBLGen Pro, 926 Windows 95/98/ME platforms, protecting, MonoDevelop, 925 693 NHibernate, 926 Windows 2000 Server, displaying Server NO_INDEXES.SQL script, 457 Control applet on, 15-16 Perl,931 Windows clients, installing, 103-108 permscripts.sql file, 738 Windows connections, inconsistent PHP, 930 connection strings for, 35-36 PORTAL & STORE, 926 Windows Embedded Server, security Python extension package, 931 considerations related to, 694 qli manual, 454 Windows kits, displaying in SourceForge, "Reading a Lock Print" paper, 855 11 SharpDevelop, 925 Windows local connection mode Time to Backup tool, 940 example of, 35 UDF libraries, 425 providing local access by means of, 30 UDFs (user-defined functions), 763 Windows NT/2000/XP platforms, UIB components, 929 protecting, 692 "Unofficial InterBase Site", 1016 Windows operating systems, requirements XDR standard, 819 for, 5 XTG ODBC driver, 925 Windows platforms Zeos components, 929 invoking gbak on, 817 WHEN {error[,error ... ] IANYl statement, starting gsec interactive sessions on, description of, 579 701 WHEN blocks, placement in exception syntax for running restore operations handling, 670-671 on, 823 WHEN Statements, handling exceptions troubleshooting backups on, 822, 827 with, 669-671 Windows server platforms, inspecting WHEN ... THEN keywords, using with Services applet on, 16 CASEO functions" 410 Windows servers WHERE clauses connectingto,35,70 using CAST() functions in, 156 creating databases on, 71 using with expressions, 414-415 using isql command-line utility with, using with SELECT statements, 69 364-365 Windows-specific parameters WHILEloop CreateinternalWindow, 752 alternative to, 585 DeadThreadsCollection, 752-753 using with stored procedures, 628-629 GuardianOption, 753 WHILE ... DO construct, using, 581-582 IpcMapSize, 753 WHILE
1091 Index
server_working_size_max and XTG ODBC driver, features of, 925 server_working_size_min, 756 XX_YY naming convention, using with wire security, overview of, 694 collation sequences, 176 WITH CHECK OPTION, using with view specifications, 492-493 y WITH GRANT OPTION privilege example of, 726 -y {filespec I suppress_output} switch in using with nested procedures, 623 gbak, effect of, 819, 824 WITH LOCK sub-clause Yaffil drivers, description of, 928-929 significance of, 368 year values, interpretlog with sliding using with explicit locking, 557-558 centurywindow algorithm, 146 wizzo.sql example script, 803 'YESTERDAY' date literal WNet connections, syntax for, 40-41 effect of, 118 WNet Named Pipes protocol, support for, meaning of, 149 29 YY date literal, description of, 145 WNet redirection, syntax for, 38 z X -z switch -x command-line switch for isql in gbak, 819, 824 description of, 809 in gfix, 846, 852 extracting metadata with, 810 in gstat, 331 [x] inetd daemon, stopping and starting in isql, 809 services for, 58 Zeos components, features of, 929 XA specification, relationship to Firebird zero-page cache setting, significance of, servers in DTP environments, 89 240 XDR standard, obtaining information .zip flies, appearance ofWindows kits as, about, 819 12
1092 JOIN lHE APRESS FORUMS ANO BE PART OF OUR COMMUNITY. You'll find discussions that cover top1cs of interest to rr professionals, programmers, and enthusiasts just I ke you. lf you post a query to one of our forums. you can expect that some of lhe best minds 1n the business-espec1ally Apress authors, who all write with The Expert'$ Voice™-will chimein to help you. Wtry not aim to become one of our most valuable partic• pants (MVPs) and win cool stuff? Here's a sampling of ooat you'll find:
DATABASES PROGRAMMING/BUSINESS Data drives everything. Unfortunately, it is. Share mformation, exchange ideas, and discuss any database Talk aoout tlle ~ress line of books !hat cover sottware programming or administration 1ssues. melhodology, best practices. and how programmers interact witll tlle 'suits •
INTERNET TECHNOLOGIE$ AND NETWORKING WEB OEVELOPMENT/DESIGN Try livlng without plumbing {and eventually 1Pv6). Ugly doesn't cut it anymore, and CGI is absurd. Talk aoout netwoil JAVA SECURITY We've come a long way from the old Oak tree. Lots of bad guys out there-the good guys need help. Hang out and discuss Java in whatever llavor you choose: Discuss oomputer and network security issues here. Just don'tlet J2SE, J2EE, J2ME, Jakarta, and so on. anyone eise know tlle answers! MAC OSX TECHNOLOGY IN ACTION All about the Zen of OS X. Cool things. Fun things. OS X is botll tlle present and lhe future for Mac apps. Make 1rs alter hours. lfs time to play. Whetller you're into LEG(}~ suggestions, oller up ideas. or boasl aboul your new hardware MINDSTORMS1M or turning an old PC 1nto a DVR, tllis is where technology turns 1nto fun. OPEN SOUACE WINDOWS Source code ls good; understandlog {open) source is better. No defenestration here. Discuss open source technolog·es and related topics such as NA<. questions aboul all aspects of Windows programm1ng. get PHP, MySOL, Unux, Perl, ~ache, Python and more. help on M1crosoft technologies covered in ~ress books. or provide feedback on any Apress W111dows book. HOW TO PARTICIPATE: Go to the Apress Forums site at http://forums.apress.com/. Click the New User link.