mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
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:
parent
932e3dcd18
commit
9f384f757f
4 changed files with 287 additions and 277 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
"* manager’s 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"
|
||||
"* manager’s 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue