Improved support of Firebird 3.0 on Linux.

git-svn-id: svn://ultimatepp.org/upp/trunk@11701 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
novo 2018-01-16 20:00:53 +00:00
parent 932e3dcd18
commit 9f384f757f
4 changed files with 287 additions and 277 deletions

View file

@ -297,18 +297,20 @@ isc_event_block, (ISC_UCHAR**, \
ISC_UCHAR**, \
ISC_USHORT, ...))
FN(ISC_USHORT, \
isc_event_block_a, (ISC_SCHAR**, \
ISC_SCHAR**, \
ISC_USHORT,
ISC_SCHAR**))
// Doesn't exists anymore.
//FN(ISC_USHORT, \
//isc_event_block_a, (ISC_SCHAR**, \
// ISC_SCHAR**, \
// ISC_USHORT,
// ISC_SCHAR**))
FN(void, \
isc_event_block_s, (ISC_SCHAR**, \
ISC_SCHAR**, \
ISC_USHORT, \
ISC_SCHAR**, \
ISC_USHORT*))
// Doesn't exists anymore.
//FN(void, \
//isc_event_block_s, (ISC_SCHAR**, \
// ISC_SCHAR**, \
// ISC_USHORT, \
// ISC_SCHAR**, \
// ISC_USHORT*))
FN(void, \
isc_event_counts, (ISC_ULONG*, \
@ -794,9 +796,10 @@ isc_embed_dsql_fetch_a, (ISC_STATUS*, \
ISC_USHORT, \
XSQLDA*))
FN(void, \
isc_embed_dsql_length, (const ISC_UCHAR*, \
ISC_USHORT*))
// Doesn't exists anymore.
//FN(void, \
//isc_embed_dsql_length, (const ISC_UCHAR*, \
// ISC_USHORT*))
FN(ISC_STATUS , \
isc_embed_dsql_open, (ISC_STATUS*, \
@ -937,12 +940,14 @@ void*))
FN(ISC_LONG, \
isc_reset_fpe, (ISC_USHORT))
FN(uintptr_t, \
isc_baddress, (ISC_SCHAR*))
// Doesn't exists anymore.
//FN(uintptr_t, \
//isc_baddress, (ISC_SCHAR*))
FN(void, \
isc_baddress_s, (const ISC_SCHAR*, \
uintptr_t*))
// Doesn't exists anymore.
//FN(void, \
//isc_baddress_s, (const ISC_SCHAR*, \
// uintptr_t*))
/*****************************************/
/* Service manager functions */

View file

@ -10,7 +10,7 @@
#define DLLFILENAME "fbclient.dll"
#define DLLCALL __stdcall
#else
#define DLLFILENAME "fbclient.so"
#define DLLFILENAME "libfbclient.so"
#endif
#define DLIMODULE FB
#define DLIHEADER <Firebird/Firebird.dli>

View file

@ -14,7 +14,7 @@
#define DLLFILENAME "fbclient.dll"
#define DLLCALL __stdcall
#else
#define DLLFILENAME "fbclient.so"
#define DLLFILENAME "libfbclient.so"
#endif
#define DLIMODULE FB
#define DLIHEADER <Firebird/Firebird.dli>

View file

@ -11,7 +11,7 @@ void TestInt(FBSession& s, const String& field_type)
"DROP TABLE test_long_table"
);
stmt.Run();
// Data definition statement.
stmt.SetStatement(
" CREATE TABLE test_long_table( \n"
@ -26,7 +26,7 @@ void TestInt(FBSession& s, const String& field_type)
" INSERT INTO test_long_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -39,11 +39,11 @@ void TestInt(FBSession& s, const String& field_type)
" SET TRANSACTION WAIT ISOLATION LEVEL READ COMMITTED"
);
stmt.Run();
int _0 = -1;
int _1 = -1;
int _2 = -1;
Ref r0(_0);
Ref r1(_1);
Ref r2(_2);
@ -52,7 +52,7 @@ void TestInt(FBSession& s, const String& field_type)
stmt.SetStatement(
" SELECT * FROM test_long_table ORDER BY id"
);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -87,7 +87,7 @@ void TestInt(FBSession& s, const String& field_type)
" SELECT * FROM test_long_table WHERE id < ? ORDER BY id"
);
stmt.SetParam(0, 50);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -106,7 +106,7 @@ void TestInt(FBSession& s, const String& field_type)
// Rerun SELECT with parameters.
stmt.SetParam(0, 25);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -134,7 +134,7 @@ void TestInt(FBSession& s, const String& field_type)
" INSERT INTO test_long_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -147,16 +147,16 @@ void TestInt(FBSession& s, const String& field_type)
}
stmt.RunX();
}
// Run SELECT.
i = 0;
const Value vNull(Null);
stmt.SetStatement(
" SELECT * FROM test_long_table ORDER BY id"
);
stmt.Run();
while (stmt.Fetch())
{
ASSERT(stmt[0] == i);
@ -181,7 +181,7 @@ void TestString(FBSession& s)
"DROP TABLE test_str_table"
);
stmt.Run();
// Data definition statement.
stmt.SetStatement(
" CREATE TABLE test_str_table( \n"
@ -196,7 +196,7 @@ void TestString(FBSession& s)
" INSERT INTO test_str_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -208,7 +208,7 @@ void TestString(FBSession& s)
int _0 = -1;
String _1;
String _2;
Ref r0(_0);
Ref r1(_1);
Ref r2(_2);
@ -217,7 +217,7 @@ void TestString(FBSession& s)
stmt.SetStatement(
" SELECT * FROM test_str_table ORDER BY id"
);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -252,7 +252,7 @@ void TestString(FBSession& s)
" SELECT * FROM test_str_table WHERE id < ? ORDER BY id"
);
stmt.SetParam(0, 50);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -271,7 +271,7 @@ void TestString(FBSession& s)
// Rerun SELECT with parameters.
stmt.SetParam(0, 25);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -299,7 +299,7 @@ void TestString(FBSession& s)
" INSERT INTO test_str_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -312,16 +312,16 @@ void TestString(FBSession& s)
}
stmt.RunX();
}
// Run SELECT.
i = 0;
const Value vNull(Null);
stmt.SetStatement(
" SELECT * FROM test_str_table ORDER BY id"
);
stmt.Run();
while (stmt.Fetch())
{
ASSERT(stmt[0] == i);
@ -346,7 +346,7 @@ void TestBlob(FBSession& s)
"DROP TABLE test_blob_table"
);
stmt.Run();
// Data definition statement.
stmt.SetStatement(
" CREATE TABLE test_blob_table( \n"
@ -361,7 +361,7 @@ void TestBlob(FBSession& s)
" INSERT INTO test_blob_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -373,7 +373,7 @@ void TestBlob(FBSession& s)
int _0 = -1;
String _1;
String _2;
Ref r0(_0);
Ref r1(_1);
Ref r2(_2);
@ -382,7 +382,7 @@ void TestBlob(FBSession& s)
stmt.SetStatement(
" SELECT * FROM test_blob_table ORDER BY id"
);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -417,7 +417,7 @@ void TestBlob(FBSession& s)
" SELECT * FROM test_blob_table WHERE id < ? ORDER BY id"
);
stmt.SetParam(0, 50);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -436,7 +436,7 @@ void TestBlob(FBSession& s)
// Rerun SELECT with parameters.
stmt.SetParam(0, 25);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -464,7 +464,7 @@ void TestBlob(FBSession& s)
" INSERT INTO test_blob_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -477,16 +477,16 @@ void TestBlob(FBSession& s)
}
stmt.RunX();
}
// Run SELECT.
i = 0;
const Value vNull(Null);
stmt.SetStatement(
" SELECT * FROM test_blob_table ORDER BY id"
);
stmt.Run();
while (stmt.Fetch())
{
ASSERT(stmt[0] == i);
@ -517,7 +517,7 @@ void TestDouble(FBSession& s, const String& field_type)
"DROP TABLE test_double_table"
);
stmt.Run();
// Data definition statement.
stmt.SetStatement(
" CREATE TABLE test_double_table( \n"
@ -532,7 +532,7 @@ void TestDouble(FBSession& s, const String& field_type)
" INSERT INTO test_double_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -544,7 +544,7 @@ void TestDouble(FBSession& s, const String& field_type)
int _0 = -1;
double _1 = -1.0;
double _2 = -1.0;
Ref r0(_0);
Ref r1(_1);
Ref r2(_2);
@ -553,7 +553,7 @@ void TestDouble(FBSession& s, const String& field_type)
stmt.SetStatement(
" SELECT * FROM test_double_table ORDER BY id"
);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -588,7 +588,7 @@ void TestDouble(FBSession& s, const String& field_type)
" SELECT * FROM test_double_table WHERE id < ? ORDER BY id"
);
stmt.SetParam(0, 50);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -607,7 +607,7 @@ void TestDouble(FBSession& s, const String& field_type)
// Rerun SELECT with parameters.
stmt.SetParam(0, 25);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -635,7 +635,7 @@ void TestDouble(FBSession& s, const String& field_type)
" INSERT INTO test_double_table \n"
" VALUES(?, ?, ?)"
);
const Value vNull(Null);
for (i = 0; i < 100; ++i)
{
@ -649,15 +649,15 @@ void TestDouble(FBSession& s, const String& field_type)
}
stmt.RunX();
}
// Run SELECT.
i = 0;
stmt.SetStatement(
" SELECT * FROM test_double_table ORDER BY id"
);
stmt.Run();
while (stmt.Fetch())
{
ASSERT(stmt[0] == i);
@ -682,7 +682,7 @@ void TestDatetime(FBSession& s)
"DROP TABLE test_datetime_table"
);
stmt.Run();
// Data definition statement.
stmt.SetStatement(
" CREATE TABLE test_datetime_table( \n"
@ -697,7 +697,7 @@ void TestDatetime(FBSession& s)
" INSERT INTO test_datetime_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -709,7 +709,7 @@ void TestDatetime(FBSession& s)
int _0 = -1;
Time _1;
Time _2;
Ref r0(_0);
Ref r1(_1);
Ref r2(_2);
@ -718,7 +718,7 @@ void TestDatetime(FBSession& s)
stmt.SetStatement(
" SELECT * FROM test_datetime_table ORDER BY id"
);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -753,7 +753,7 @@ void TestDatetime(FBSession& s)
" SELECT * FROM test_datetime_table WHERE id < ? ORDER BY id"
);
stmt.SetParam(0, 50);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -772,7 +772,7 @@ void TestDatetime(FBSession& s)
// Rerun SELECT with parameters.
stmt.SetParam(0, 25);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -800,7 +800,7 @@ void TestDatetime(FBSession& s)
" INSERT INTO test_datetime_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -813,16 +813,16 @@ void TestDatetime(FBSession& s)
}
stmt.RunX();
}
// Run SELECT.
i = 0;
const Value vNull(Null);
stmt.SetStatement(
" SELECT * FROM test_datetime_table ORDER BY id"
);
stmt.Run();
while (stmt.Fetch())
{
ASSERT(stmt[0] == i);
@ -847,7 +847,7 @@ void TestBool(FBSession& s, const String& field_type, bool str_type = false)
"DROP TABLE test_bool_table"
);
stmt.Run();
// Data definition statement.
stmt.SetStatement(
" CREATE TABLE test_bool_table( \n"
@ -862,7 +862,7 @@ void TestBool(FBSession& s, const String& field_type, bool str_type = false)
" INSERT INTO test_bool_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -874,7 +874,7 @@ void TestBool(FBSession& s, const String& field_type, bool str_type = false)
int _0 = -1;
bool _1 = false;
bool _2 = false;
Ref r0(_0);
Ref r1(_1);
Ref r2(_2);
@ -883,7 +883,7 @@ void TestBool(FBSession& s, const String& field_type, bool str_type = false)
stmt.SetStatement(
" SELECT * FROM test_bool_table ORDER BY id"
);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -921,7 +921,7 @@ void TestBool(FBSession& s, const String& field_type, bool str_type = false)
" SELECT * FROM test_bool_table WHERE id < ? ORDER BY id"
);
stmt.SetParam(0, 50);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -940,7 +940,7 @@ void TestBool(FBSession& s, const String& field_type, bool str_type = false)
// Rerun SELECT with parameters.
stmt.SetParam(0, 25);
stmt.Run();
i = 0;
while (stmt.Fetch())
@ -968,7 +968,7 @@ void TestBool(FBSession& s, const String& field_type, bool str_type = false)
" INSERT INTO test_bool_table \n"
" VALUES(?, ?, ?)"
);
for (i = 0; i < 100; ++i)
{
stmt.SetParam(0, i);
@ -981,20 +981,20 @@ void TestBool(FBSession& s, const String& field_type, bool str_type = false)
}
stmt.RunX();
}
// Run SELECT.
i = 0;
const Value vNull(Null);
stmt.SetStatement(
" SELECT * FROM test_bool_table ORDER BY id"
);
stmt.Run();
while (stmt.Fetch())
{
ASSERT(stmt[0] == i);
if (str_type)
{
if (i % 2 == 0) {
@ -1024,7 +1024,7 @@ void TestBool(FBSession& s, const String& field_type, bool str_type = false)
class Exec : public StatementExecutor {
public:
virtual bool Execute(const String& stmt) {
Cout() << stmt << EOL;
Cout() << stmt << EOL;
return true;
}
};
@ -1032,247 +1032,252 @@ public:
CONSOLE_APP_MAIN
{
const Vector<String>& cmd_line = CommandLine();
if (cmd_line.GetCount() > 1 && FileExists(cmd_line[0]) && FileExists(cmd_line[1]))
{
FBSession s;
s.Connect(
cmd_line[1],
NULL,
"SYSDBA",
"masterkey",
cmd_line[0]
);
if (cmd_line.GetCount() > 1 && FileExists(cmd_line[0]) && FileExists(cmd_line[1])) {
try {
FBSession s;
s.Connect(
cmd_line[1],
NULL,
"SYSDBA",
"masterkey",
cmd_line[0]
);
#if 0
const char* script;
RunScript runscript = s.GetRunScript();
Exec exec;
script =
" /* comment */"
;
script =
" /* comment 01 */ \n"
" /* comment 02 */"
;
const char* script;
RunScript runscript = s.GetRunScript();
Exec exec;
script =
" /* SELECT rdb$type_name, rdb$type FROM rdb$types */"
;
script =
" /* comment */"
;
script =
" -- comment 01 \n"
" -- comment 02 "
;
script =
" /* comment 01 */ \n"
" /* comment 02 */"
;
script =
" 'string' "
;
script =
" /* SELECT rdb$type_name, rdb$type FROM rdb$types */"
;
script =
"'s''t''r'''"
;
script =
" -- comment 01 \n"
" -- comment 02 "
;
script =
" DROP PROCEDURE test_procedure_01;"
;
script =
" 'string' "
;
script =
" CREATE OR ALTER PROCEDURE test_procedure_01 (in_param integer) returns (out_param integer) \n"
" as begin out_param = in_param + 1; end; \n"
;
script =
"'s''t''r'''"
;
script =
" CREATE OR ALTER PROCEDURE test_procedure_01 (in_param integer) returns (out_param integer) \n"
" as begin out_param = in_param + 1; end; \n"
" DROP PROCEDURE test_procedure_01;"
;
script =
" DROP PROCEDURE test_procedure_01;"
;
script =
"/* Display an org-chart. \n"
"* \n"
"* Parameters: \n"
"* -- \n"
"* Returns: \n"
"* parent department \n"
"* department name \n"
"* department manager \n"
"* managers job title \n"
"* number of employees in the department */ \n"
"CREATE PROCEDURE ORG_CHART \n"
" RETURNS (HEAD_DEPT CHAR(25), DEPARTMENT CHAR(25), \n"
" MNGR_NAME CHAR(20), TITLE CHAR(5), EMP_CNT INTEGER) \n"
" AS \n"
" DECLARE VARIABLE mngr_no INTEGER; \n"
" DECLARE VARIABLE dno CHAR(3); \n"
" BEGIN \n"
" FOR SELECT H.DEPARTMENT, D.DEPARTMENT, D.MNGR_NO, D.DEPT_NO \n"
" FROM DEPARTMENT D \n"
" LEFT OUTER JOIN DEPARTMENT H ON D.HEAD_DEPT = H.DEPT_NO \n"
" ORDER BY D.DEPT_NO \n"
" INTO :head_dept, :department, :mngr_no, :dno \n"
" DO \n"
" BEGIN \n"
" IF (:mngr_no IS NULL) THEN \n"
" BEGIN \n"
" MNGR_NAME = '--TBH--'; \n"
" TITLE = ''; \n"
" END \n"
" ELSE \n"
" SELECT FULL_NAME, JOB_CODE \n"
" FROM EMPLOYEE \n"
" WHERE EMP_NO = :mngr_no \n"
" INTO :mngr_name, :title; \n"
" SELECT COUNT(EMP_NO) \n"
" FROM EMPLOYEE \n"
" WHERE DEPT_NO = :dno \n"
" INTO :emp_cnt; \n"
" SUSPEND; \n"
" END \n"
" END; ";
script =
" CREATE OR ALTER PROCEDURE test_procedure_01 (in_param integer) returns (out_param integer) \n"
" as begin out_param = in_param + 1; end; \n"
;
script =
"SET TERM !! ; \n"
"SET TERM ; !! \n"
;
script =
" CREATE OR ALTER PROCEDURE test_procedure_01 (in_param integer) returns (out_param integer) \n"
" as begin out_param = in_param + 1; end; \n"
" DROP PROCEDURE test_procedure_01;"
;
script =
"SET TERM !! ; \n"
"CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEE \n"
" AFTER UPDATE AS \n"
" BEGIN \n"
" IF (OLD.SALARY <> NEW.SALARY) THEN \n"
" INSERT INTO SALARY_HISTORY \n"
" (EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY, PERCENT_CHANGE) \n"
" VALUES (OLD.EMP_NO, now, USER,OLD.SALARY, \n"
" (NEW.SALARY - OLD.SALARY) * 100 / OLD.SALARY); \n"
" END !! \n"
"SET TERM ; !!"
;
script =
"/* Display an org-chart. \n"
"* \n"
"* Parameters: \n"
"* -- \n"
"* Returns: \n"
"* parent department \n"
"* department name \n"
"* department manager \n"
"* managers job title \n"
"* number of employees in the department */ \n"
"CREATE PROCEDURE ORG_CHART \n"
" RETURNS (HEAD_DEPT CHAR(25), DEPARTMENT CHAR(25), \n"
" MNGR_NAME CHAR(20), TITLE CHAR(5), EMP_CNT INTEGER) \n"
" AS \n"
" DECLARE VARIABLE mngr_no INTEGER; \n"
" DECLARE VARIABLE dno CHAR(3); \n"
" BEGIN \n"
" FOR SELECT H.DEPARTMENT, D.DEPARTMENT, D.MNGR_NO, D.DEPT_NO \n"
" FROM DEPARTMENT D \n"
" LEFT OUTER JOIN DEPARTMENT H ON D.HEAD_DEPT = H.DEPT_NO \n"
" ORDER BY D.DEPT_NO \n"
" INTO :head_dept, :department, :mngr_no, :dno \n"
" DO \n"
" BEGIN \n"
" IF (:mngr_no IS NULL) THEN \n"
" BEGIN \n"
" MNGR_NAME = '--TBH--'; \n"
" TITLE = ''; \n"
" END \n"
" ELSE \n"
" SELECT FULL_NAME, JOB_CODE \n"
" FROM EMPLOYEE \n"
" WHERE EMP_NO = :mngr_no \n"
" INTO :mngr_name, :title; \n"
" SELECT COUNT(EMP_NO) \n"
" FROM EMPLOYEE \n"
" WHERE DEPT_NO = :dno \n"
" INTO :emp_cnt; \n"
" SUSPEND; \n"
" END \n"
" END; ";
(*runscript)(script, exec, CNULL);
script =
"SET TERM !! ; \n"
"SET TERM ; !! \n"
;
script =
"SET TERM !! ; \n"
"CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEE \n"
" AFTER UPDATE AS \n"
" BEGIN \n"
" IF (OLD.SALARY <> NEW.SALARY) THEN \n"
" INSERT INTO SALARY_HISTORY \n"
" (EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY, PERCENT_CHANGE) \n"
" VALUES (OLD.EMP_NO, now, USER,OLD.SALARY, \n"
" (NEW.SALARY - OLD.SALARY) * 100 / OLD.SALARY); \n"
" END !! \n"
"SET TERM ; !!"
;
(*runscript)(script, exec, CNULL);
#endif
Sql sql(s);
Sql sql(s);
#if 1
TRANSACTION(sql) {
}
TestBool(s, "bigint");
TRANSACTION(s) {
TRANSACTION(sql) {
}
TestBool(s, "bigint");
}
TRANSACTION(s) {
TestBool(s, "bigint");
}
TestBool(s, "integer");
TRANSACTION(s) {
TestBool(s, "integer");
}
TRANSACTION(s) {
TestBool(s, "integer");
}
TestBool(s, "numeric(1)");
TRANSACTION(s) {
TestBool(s, "numeric(1)");
}
TestBool(s, "double precision");
TRANSACTION(s) {
TRANSACTION(s) {
TestBool(s, "numeric(1)");
}
TestBool(s, "double precision");
}
TestBool(s, "varchar(1)", true);
TRANSACTION(s) {
TRANSACTION(s) {
TestBool(s, "double precision");
}
TestBool(s, "varchar(1)", true);
}
TestBool(s, "char(1)", true);
TRANSACTION(s) {
TRANSACTION(s) {
TestBool(s, "varchar(1)", true);
}
TestBool(s, "char(1)", true);
}
TRANSACTION(s) {
TestBool(s, "char(1)", true);
}
TestInt(s, "INTEGER");
TRANSACTION(s) {
TestInt(s, "INTEGER");
}
TestInt(s, "SMALLINT");
TRANSACTION(s) {
TRANSACTION(s) {
TestInt(s, "INTEGER");
}
TestInt(s, "SMALLINT");
}
TestString(s);
TRANSACTION(s) {
TRANSACTION(s) {
TestInt(s, "SMALLINT");
}
TestString(s);
}
TestDouble(s, "DOUBLE PRECISION");
TRANSACTION(s) {
TRANSACTION(s) {
TestString(s);
}
TestDouble(s, "DOUBLE PRECISION");
}
TRANSACTION(s) {
TestDouble(s, "DOUBLE PRECISION");
}
TestDouble(s, "FLOAT");
TRANSACTION(s) {
TestDouble(s, "FLOAT");
}
TRANSACTION(s) {
TestDouble(s, "FLOAT");
}
TestDouble(s, "DECIMAL(18, 4)");
TRANSACTION(s) {
TestDouble(s, "DECIMAL(18, 4)");
}
TRANSACTION(s) {
TestDouble(s, "DECIMAL(18, 4)");
}
TestDouble(s, "NUMERIC(18, 4)");
TRANSACTION(s) {
TestDouble(s, "NUMERIC(18, 4)");
}
TRANSACTION(s) {
TestDouble(s, "NUMERIC(18, 4)");
}
TestDatetime(s);
TRANSACTION(s) {
TestDatetime(s);
}
TestBlob(s);
TRANSACTION(s) {
TRANSACTION(s) {
TestDatetime(s);
}
TestBlob(s);
}
TRANSACTION(s) {
TestBlob(s);
}
#endif
#if 0
// Should be tested against examples\empbuild\EMPLOYEE.FDB
FBSequence seq("CUST_NO_GEN", s);
Value seq_v = seq.Get();
int seq_i = seq_v;
Cout() << "Users:" << EOL;
Vector<String> users = s.EnumUsers();
for(int i = 0; i < users.GetCount(); ++i)
Cout() << users[i] << EOL;
// Should be tested against examples\empbuild\EMPLOYEE.FDB
FBSequence seq("CUST_NO_GEN", s);
Value seq_v = seq.Get();
int seq_i = seq_v;
Cout() << "Views:" << EOL;
Vector<String> views = s.EnumViews("");
for(int i = 0; i < views.GetCount(); ++i)
Cout() << views[i] << EOL;
Cout() << "Users:" << EOL;
Vector<String> users = s.EnumUsers();
for(int i = 0; i < users.GetCount(); ++i)
Cout() << users[i] << EOL;
Cout() << "Tables:" << EOL;
Vector<String> tables = s.EnumTables("");
for(int i = 0; i < tables.GetCount(); ++i)
Cout() << tables[i] << EOL;
Cout() << "Views:" << EOL;
Vector<String> views = s.EnumViews("");
for(int i = 0; i < views.GetCount(); ++i)
Cout() << views[i] << EOL;
Cout() << "Sequences:" << EOL;
Vector<String> sequences = s.EnumSequences("");
for(int i = 0; i < sequences.GetCount(); ++i)
Cout() << sequences[i] << EOL;
Cout() << "Tables:" << EOL;
Vector<String> tables = s.EnumTables("");
for(int i = 0; i < tables.GetCount(); ++i)
Cout() << tables[i] << EOL;
Cout() << "PrimaryKey:" << EOL;
Vector<String> pk_cols = s.EnumPrimaryKey("", "JOB");
for(int i = 0; i < pk_cols.GetCount(); ++i)
Cout() << pk_cols[i] << EOL;
Cout() << "Sequences:" << EOL;
Vector<String> sequences = s.EnumSequences("");
for(int i = 0; i < sequences.GetCount(); ++i)
Cout() << sequences[i] << EOL;
Cout() << "Columns:" << EOL;
Vector<SqlColumnInfo> cols = s.EnumColumns("", "JOB");
for(int i = 0; i < cols.GetCount(); ++i)
Cout() << cols[i].name << EOL;
Cout() << "PrimaryKey:" << EOL;
Vector<String> pk_cols = s.EnumPrimaryKey("", "JOB");
for(int i = 0; i < pk_cols.GetCount(); ++i)
Cout() << pk_cols[i] << EOL;
Cout() << "Columns:" << EOL;
Vector<SqlColumnInfo> cols = s.EnumColumns("", "JOB");
for(int i = 0; i < cols.GetCount(); ++i)
Cout() << cols[i].name << EOL;
#endif
}
catch (const ibpp::DbExc& e) {
Cerr() << "FAILED: " << e << EOL;
RDUMP(e);
}
}
}