maxvolfiles integer default 0,
maxvolbytes bigint default 0,
inchanger smallint default 0,
- StorageId integer default 0,
+ StorageId bigint default 0,
DeviceId integer default 0,
mediaaddressing smallint default 0,
volreadtime bigint default 0,
"SELECT JobFiles FROM Job WHERE JobId=%s";
/* List last 20 Jobs */
+#if HAVE_INGRES
+const char *uar_list_jobs =
+ "SELECT JobId,Client.Name as Client,StartTime,Level as "
+ "JobLevel,JobFiles,JobBytes "
+ "FROM Client,Job WHERE Client.ClientId=Job.ClientId AND JobStatus IN ('T','W') "
+ "AND Type='B' ORDER BY StartTime DESC FETCH FIRST 20 ROWS ONLY";
+#else
const char *uar_list_jobs =
"SELECT JobId,Client.Name as Client,StartTime,Level as "
"JobLevel,JobFiles,JobBytes "
"FROM Client,Job WHERE Client.ClientId=Job.ClientId AND JobStatus IN ('T','W') "
"AND Type='B' ORDER BY StartTime DESC LIMIT 20";
+#endif
const char *uar_print_jobs =
"SELECT DISTINCT JobId,Level,JobFiles,JobBytes,StartTime,VolumeName"
const char *uar_del_temp = "DROP TABLE temp";
const char *uar_del_temp1 = "DROP TABLE temp1";
+#if HAVE_INGRES
+const char *uar_last_full =
+ "INSERT INTO temp1 SELECT Job.JobId,JobTdate "
+ "FROM Client,Job,JobMedia,Media,FileSet WHERE Client.ClientId=%s "
+ "AND Job.ClientId=%s "
+ "AND Job.StartTime < '%s' "
+ "AND Level='F' AND JobStatus IN ('T','W') AND Type='B' "
+ "AND JobMedia.JobId=Job.JobId "
+ "AND Media.Enabled=1 "
+ "AND JobMedia.MediaId=Media.MediaId "
+ "AND Job.FileSetId=FileSet.FileSetId "
+ "AND FileSet.FileSet='%s' "
+ "%s"
+ "ORDER BY Job.JobTDate DESC FETCH FIRST 1 ROW ONLY";
+#else
const char *uar_last_full =
"INSERT INTO temp1 SELECT Job.JobId,JobTdate "
"FROM Client,Job,JobMedia,Media,FileSet WHERE Client.ClientId=%s "
"AND FileSet.FileSet='%s' "
"%s"
"ORDER BY Job.JobTDate DESC LIMIT 1";
+#endif
const char *uar_full =
"INSERT INTO temp SELECT Job.JobId,Job.JobTDate,"
"AND JobMedia.JobId=Job.JobId "
"AND JobMedia.MediaId=Media.MediaId";
+#if HAVE_INGRES
+const char *uar_dif =
+ "INSERT INTO temp SELECT Job.JobId,Job.JobTDate,Job.ClientId,"
+ "Job.Level,Job.JobFiles,Job.JobBytes,"
+ "Job.StartTime,Media.VolumeName,JobMedia.StartFile,"
+ "Job.VolSessionId,Job.VolSessionTime "
+ "FROM Job,JobMedia,Media,FileSet "
+ "WHERE Job.JobTDate>%s AND Job.StartTime<'%s' "
+ "AND Job.ClientId=%s "
+ "AND JobMedia.JobId=Job.JobId "
+ "AND Media.Enabled=1 "
+ "AND JobMedia.MediaId=Media.MediaId "
+ "AND Job.Level='D' AND JobStatus IN ('T','W') AND Type='B' "
+ "AND Job.FileSetId=FileSet.FileSetId "
+ "AND FileSet.FileSet='%s' "
+ "%s"
+ "ORDER BY Job.JobTDate DESC FETCH FIRST 1 ROW ONLY";
+#else
const char *uar_dif =
"INSERT INTO temp SELECT Job.JobId,Job.JobTDate,Job.ClientId,"
"Job.Level,Job.JobFiles,Job.JobBytes,"
"AND FileSet.FileSet='%s' "
"%s"
"ORDER BY Job.JobTDate DESC LIMIT 1";
+#endif
const char *uar_inc =
"INSERT INTO temp SELECT Job.JobId,Job.JobTDate,Job.ClientId,"
* Find JobId, FileIndex for a given path/file and date
* for use when inserting individual files into the tree.
*/
+#if HAVE_INGRES
+const char *uar_jobid_fileindex =
+ "SELECT Job.JobId,File.FileIndex FROM Job,File,Path,Filename,Client "
+ "WHERE Job.JobId=File.JobId "
+ "AND Job.StartTime<='%s' "
+ "AND Path.Path='%s' "
+ "AND Filename.Name='%s' "
+ "AND Client.Name='%s' "
+ "AND Job.ClientId=Client.ClientId "
+ "AND Path.PathId=File.PathId "
+ "AND Filename.FilenameId=File.FilenameId "
+ "AND JobStatus IN ('T','W') AND Type='B' "
+ "ORDER BY Job.StartTime DESC FETCH FIRST 1 ROW ONLY";
+#else
const char *uar_jobid_fileindex =
"SELECT Job.JobId,File.FileIndex FROM Job,File,Path,Filename,Client "
"WHERE Job.JobId=File.JobId "
"AND Filename.FilenameId=File.FilenameId "
"AND JobStatus IN ('T','W') AND Type='B' "
"ORDER BY Job.StartTime DESC LIMIT 1";
+#endif
+#if HAVE_INGRES
+const char *uar_jobids_fileindex =
+ "SELECT Job.JobId,File.FileIndex FROM Job,File,Path,Filename,Client "
+ "WHERE Job.JobId IN (%s) "
+ "AND Job.JobId=File.JobId "
+ "AND Job.StartTime<='%s' "
+ "AND Path.Path='%s' "
+ "AND Filename.Name='%s' "
+ "AND Client.Name='%s' "
+ "AND Job.ClientId=Client.ClientId "
+ "AND Path.PathId=File.PathId "
+ "AND Filename.FilenameId=File.FilenameId "
+ "ORDER BY Job.StartTime DESC FETCH FIRST 1 ROW ONLY";
+#else
const char *uar_jobids_fileindex =
"SELECT Job.JobId,File.FileIndex FROM Job,File,Path,Filename,Client "
"WHERE Job.JobId IN (%s) "
"AND Path.PathId=File.PathId "
"AND Filename.FilenameId=File.FilenameId "
"ORDER BY Job.StartTime DESC LIMIT 1";
+#endif
/* Query to get list of files from table -- presuably built by an external program */
const char *uar_jobid_fileindex_from_table =
"AND Client.ClientId=Job.ClientId "
"AND Job.JobId=File.JobId AND File.FileIndex > 0 "
"AND Path.PathId=File.PathId AND Filename.FilenameId=File.FilenameId "
- "AND Filename.Name='%s' ORDER BY StartTime DESC LIMIT 20"
+ "AND Filename.Name='%s' ORDER BY StartTime DESC FETCH FIRST 20 ROWS ONLY"
};
const char *uar_create_temp[5] = {
"Level CHAR,"
"JobFiles INTEGER,"
"JobBytes BIGINT,"
- "StartTime TEXT,"
- "VolumeName TEXT,"
+ "StartTime VARCHAR(256),"
+ "VolumeName VARCHAR(256),"
"StartFile INTEGER,"
"VolSessionId INTEGER,"
"VolSessionTime INTEGER)"
/* If no Id given, we must find corresponding job */
if (jr->JobId == 0) {
/* Differential is since last Full backup */
+#if HAVE_INGRES
+ Mmsg(mdb->cmd,
+"SELECT StartTime FROM Job WHERE JobStatus IN ('T','W') AND Type='%c' AND "
+"Level='%c' AND Name='%s' AND ClientId=%s AND FileSetId=%s "
+"ORDER BY StartTime DESC FETCH FIRST 1 ROW ONLY",
+ jr->JobType, L_FULL, jr->Name,
+ edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2));
+#else
Mmsg(mdb->cmd,
"SELECT StartTime FROM Job WHERE JobStatus IN ('T','W') AND Type='%c' AND "
"Level='%c' AND Name='%s' AND ClientId=%s AND FileSetId=%s "
"ORDER BY StartTime DESC LIMIT 1",
jr->JobType, L_FULL, jr->Name,
edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2));
+#endif
if (jr->JobLevel == L_DIFFERENTIAL) {
/* SQL cmd for Differential backup already edited above */
}
sql_free_result(mdb);
/* Now edit SQL command for Incremental Job */
+#if HAVE_INGRES
+ Mmsg(mdb->cmd,
+"SELECT StartTime FROM Job WHERE JobStatus IN ('T','W') AND Type='%c' AND "
+"Level IN ('%c','%c','%c') AND Name='%s' AND ClientId=%s "
+"AND FileSetId=%s ORDER BY StartTime DESC FETCH FIRST 1 ROW ONLY",
+ jr->JobType, L_INCREMENTAL, L_DIFFERENTIAL, L_FULL, jr->Name,
+ edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2));
+#else
Mmsg(mdb->cmd,
"SELECT StartTime FROM Job WHERE JobStatus IN ('T','W') AND Type='%c' AND "
"Level IN ('%c','%c','%c') AND Name='%s' AND ClientId=%s "
"AND FileSetId=%s ORDER BY StartTime DESC LIMIT 1",
jr->JobType, L_INCREMENTAL, L_DIFFERENTIAL, L_FULL, jr->Name,
edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2));
+#endif
} else {
Mmsg1(mdb->errmsg, _("Unknown level=%d\n"), jr->JobLevel);
goto bail_out;
pm_strcpy(stime, "0000-00-00 00:00:00"); /* default */
+#if HAVE_INGRES
+ Mmsg(mdb->cmd,
+"SELECT StartTime FROM Job WHERE JobStatus IN ('T','W') AND Type='%c' AND "
+"Level='%c' AND Name='%s' AND ClientId=%s AND FileSetId=%s "
+"ORDER BY StartTime DESC FETCH FIRST 1 ROW ONLY",
+ jr->JobType, JobLevel, jr->Name,
+ edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2));
+#else
Mmsg(mdb->cmd,
"SELECT StartTime FROM Job WHERE JobStatus IN ('T','W') AND Type='%c' AND "
"Level='%c' AND Name='%s' AND ClientId=%s AND FileSetId=%s "
"ORDER BY StartTime DESC LIMIT 1",
jr->JobType, JobLevel, jr->Name,
edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2));
+#endif
if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
Mmsg2(&mdb->errmsg, _("Query error for start time request: ERR=%s\nCMD=%s\n"),
sql_strerror(mdb), mdb->cmd);
db_lock(mdb);
/* Differential is since last Full backup */
+#if HAVE_INGRES
+ Mmsg(mdb->cmd,
+"SELECT Level FROM Job WHERE JobStatus NOT IN ('T','W') AND "
+"Type='%c' AND Level IN ('%c','%c') AND Name='%s' AND ClientId=%s "
+"AND FileSetId=%s AND StartTime>'%s' "
+"ORDER BY StartTime DESC FETCH FIRST 1 ROW ONLY",
+ jr->JobType, L_FULL, L_DIFFERENTIAL, jr->Name,
+ edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2),
+ stime);
+#else
Mmsg(mdb->cmd,
"SELECT Level FROM Job WHERE JobStatus NOT IN ('T','W') AND "
"Type='%c' AND Level IN ('%c','%c') AND Name='%s' AND ClientId=%s "
jr->JobType, L_FULL, L_DIFFERENTIAL, jr->Name,
edit_int64(jr->ClientId, ed1), edit_int64(jr->FileSetId, ed2),
stime);
-
+#endif
if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
db_unlock(mdb);
return false;
db_lock(mdb);
Dmsg2(100, "JobLevel=%d JobType=%d\n", jr->JobLevel, jr->JobType);
if (jr->JobLevel == L_VERIFY_CATALOG) {
+#if HAVE_INGRES
+ Mmsg(mdb->cmd,
+"SELECT JobId FROM Job WHERE Type='V' AND Level='%c' AND "
+" JobStatus IN ('T','W') AND Name='%s' AND "
+"ClientId=%s ORDER BY StartTime DESC FETCH FIRST 1 ROW ONLY",
+ L_VERIFY_INIT, jr->Name,
+ edit_int64(jr->ClientId, ed1));
+#else
Mmsg(mdb->cmd,
"SELECT JobId FROM Job WHERE Type='V' AND Level='%c' AND "
" JobStatus IN ('T','W') AND Name='%s' AND "
"ClientId=%s ORDER BY StartTime DESC LIMIT 1",
L_VERIFY_INIT, jr->Name,
edit_int64(jr->ClientId, ed1));
+#endif
} else if (jr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG ||
jr->JobLevel == L_VERIFY_DISK_TO_CATALOG ||
jr->JobType == JT_BACKUP) {
if (Name) {
+#if HAVE_INGRES
+ Mmsg(mdb->cmd,
+"SELECT JobId FROM Job WHERE Type='B' AND JobStatus IN ('T','W') AND "
+"Name='%s' ORDER BY StartTime DESC FETCH FIRST 1 ROW ONLY", Name);
+#else
Mmsg(mdb->cmd,
"SELECT JobId FROM Job WHERE Type='B' AND JobStatus IN ('T','W') AND "
"Name='%s' ORDER BY StartTime DESC LIMIT 1", Name);
+#endif
} else {
+#if HAVE_INGRES
+ Mmsg(mdb->cmd,
+"SELECT JobId FROM Job WHERE Type='B' AND JobStatus IN ('T','W') AND "
+"ClientId=%s ORDER BY StartTime DESC FETCH FIRST 1 ROW ONLY",
+ edit_int64(jr->ClientId, ed1));
+#else
Mmsg(mdb->cmd,
"SELECT JobId FROM Job WHERE Type='B' AND JobStatus IN ('T','W') AND "
"ClientId=%s ORDER BY StartTime DESC LIMIT 1",
edit_int64(jr->ClientId, ed1));
+#endif
}
} else {
Mmsg1(&mdb->errmsg, _("Unknown Job level=%d\n"), jr->JobLevel);
db_lock(mdb);
if (item == -1) { /* find oldest volume */
/* Find oldest volume */
+#if HAVE_INGRES
+ Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,"
+ "VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes,"
+ "MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,"
+ "MaxVolFiles,Recycle,Slot,FirstWritten,LastWritten,InChanger,"
+ "EndFile,EndBlock,VolParts,LabelType,LabelDate,StorageId,"
+ "Enabled,LocationId,RecycleCount,InitialWrite,"
+ "ScratchPoolId,RecyclePoolId,VolReadTime,VolWriteTime,ActionOnPurge "
+ "FROM Media WHERE PoolId=%s AND MediaType='%s' AND VolStatus IN ('Full',"
+ "'Recycle','Purged','Used','Append') AND Enabled=1 "
+ "ORDER BY LastWritten FETCH FIRST 1 ROW ONLY",
+ edit_int64(mr->PoolId, ed1), mr->MediaType);
+#else
Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,"
"VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes,"
"MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,"
"'Recycle','Purged','Used','Append') AND Enabled=1 "
"ORDER BY LastWritten LIMIT 1",
edit_int64(mr->PoolId, ed1), mr->MediaType);
+#endif
item = 1;
} else {
POOL_MEM changer(PM_FNAME);
} else {
order = "ORDER BY LastWritten IS NULL,LastWritten DESC,MediaId"; /* take most recently written */
}
+#if HAVE_INGRES
+ Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,"
+ "VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes,"
+ "MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,"
+ "MaxVolFiles,Recycle,Slot,FirstWritten,LastWritten,InChanger,"
+ "EndFile,EndBlock,VolParts,LabelType,LabelDate,StorageId,"
+ "Enabled,LocationId,RecycleCount,InitialWrite,"
+ "ScratchPoolId,RecyclePoolId,VolReadTime,VolWriteTime,ActionOnPurge "
+ "FROM Media WHERE PoolId=%s AND MediaType='%s' AND Enabled=1 "
+ "AND VolStatus='%s' "
+ "%s "
+ "%s FETCH FIRST %d ROWS ONLY",
+ edit_int64(mr->PoolId, ed1), mr->MediaType,
+ mr->VolStatus, changer.c_str(), order, item);
+#else
Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,"
"VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes,"
"MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,"
"%s LIMIT %d",
edit_int64(mr->PoolId, ed1), mr->MediaType,
mr->VolStatus, changer.c_str(), order, item);
+#endif
}
Dmsg1(050, "fnextvol=%s\n", mdb->cmd);
if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
char ed1[50], ed2[50], ed3[50];
if (jcr->getJobLevel() == L_VERIFY_DISK_TO_CATALOG) {
+#if HAVE_INGRES
+ Mmsg(mdb->cmd,
+"SELECT FileId, LStat, MD5 FROM File,Job WHERE "
+"File.JobId=Job.JobId AND File.PathId=%s AND "
+"File.FilenameId=%s AND Job.Type='B' AND Job.JobStatus IN ('T','W') AND "
+"ClientId=%s ORDER BY StartTime DESC FETCH FIRST 1 ROW ONLY",
+ edit_int64(fdbr->PathId, ed1),
+ edit_int64(fdbr->FilenameId, ed2),
+ edit_int64(jr->ClientId,ed3));
+#else
Mmsg(mdb->cmd,
"SELECT FileId, LStat, MD5 FROM File,Job WHERE "
"File.JobId=Job.JobId AND File.PathId=%s AND "
edit_int64(fdbr->PathId, ed1),
edit_int64(fdbr->FilenameId, ed2),
edit_int64(jr->ClientId,ed3));
+#endif
} else {
Mmsg(mdb->cmd,
"SELECT FileId, LStat, MD5 FROM File WHERE File.JobId=%s AND File.PathId=%s AND "
"WHERE FileSetId=%s",
edit_int64(fsr->FileSetId, ed1));
} else { /* find by name */
+#if HAVE_INGRES
+ Mmsg(mdb->cmd,
+ "SELECT FileSetId,FileSet,MD5,CreateTime FROM FileSet "
+ "WHERE FileSet='%s' ORDER BY CreateTime DESC FETCH FIRST 1 ROW ONLY", fsr->FileSet);
+#else
Mmsg(mdb->cmd,
"SELECT FileSetId,FileSet,MD5,CreateTime FROM FileSet "
"WHERE FileSet='%s' ORDER BY CreateTime DESC LIMIT 1", fsr->FileSet);
+#endif
}
if (QUERY_DB(jcr, mdb, mdb->cmd)) {
jobids->count = 0;
/* First, find the last good Full backup for this job/client/fileset */
+#if HAVE_INGRES
+ Mmsg(query,
+"CREATE TABLE btemp3%s AS "
+ "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles "
+ "FROM Job JOIN FileSet USING (FileSetId) "
+ "WHERE ClientId = %s "
+ "AND Level='F' AND JobStatus IN ('T','W') AND Type='B' "
+ "AND StartTime<'%s' "
+ "AND FileSet.FileSet=(SELECT FileSet FROM FileSet WHERE FileSetId = %s) "
+ "ORDER BY Job.JobTDate DESC FETCH FIRST 1 ROW ONLY",
+ edit_uint64(jcr->JobId, jobid),
+ edit_uint64(jr->ClientId, clientid),
+ date,
+ edit_uint64(jr->FileSetId, filesetid));
+#else
Mmsg(query,
"CREATE TABLE btemp3%s AS "
"SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles "
edit_uint64(jr->ClientId, clientid),
date,
edit_uint64(jr->FileSetId, filesetid));
+#endif
if (!db_sql_query(mdb, query.c_str(), NULL, NULL)) {
goto bail_out;
if (jr->JobLevel == L_INCREMENTAL || jr->JobLevel == L_VIRTUAL_FULL) {
/* Now, find the last differential backup after the last full */
+#if HAVE_INGRES
+ Mmsg(query,
+"INSERT INTO btemp3%s (JobId, StartTime, EndTime, JobTDate, PurgedFiles) "
+ "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles "
+ "FROM Job JOIN FileSet USING (FileSetId) "
+ "WHERE ClientId = %s "
+ "AND Level='D' AND JobStatus IN ('T','W') AND Type='B' "
+ "AND StartTime > (SELECT EndTime FROM btemp3%s ORDER BY EndTime DESC LIMIT 1) "
+ "AND StartTime < '%s' "
+ "AND FileSet.FileSet= (SELECT FileSet FROM FileSet WHERE FileSetId = %s) "
+ "ORDER BY Job.JobTDate DESC FETCH FIRST 1 ROW ONLY ",
+ jobid,
+ clientid,
+ jobid,
+ date,
+ filesetid);
+#else
Mmsg(query,
"INSERT INTO btemp3%s (JobId, StartTime, EndTime, JobTDate, PurgedFiles) "
"SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles "
jobid,
date,
filesetid);
+#endif
if (!db_sql_query(mdb, query.c_str(), NULL, NULL)) {
goto bail_out;
}
/* We just have to take all incremental after the last Full/Diff */
+#if HAVE_INGRES
+ Mmsg(query,
+"INSERT INTO btemp3%s (JobId, StartTime, EndTime, JobTDate, PurgedFiles) "
+ "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles "
+ "FROM Job JOIN FileSet USING (FileSetId) "
+ "WHERE ClientId = %s "
+ "AND Level='I' AND JobStatus IN ('T','W') AND Type='B' "
+ "AND StartTime > (SELECT EndTime FROM btemp3%s ORDER BY EndTime DESC FETCH FIRST 1 ROW ONLY) "
+ "AND StartTime < '%s' "
+ "AND FileSet.FileSet= (SELECT FileSet FROM FileSet WHERE FileSetId = %s) "
+ "ORDER BY Job.JobTDate DESC ",
+ jobid,
+ clientid,
+ jobid,
+ date,
+ filesetid);
+#else
Mmsg(query,
"INSERT INTO btemp3%s (JobId, StartTime, EndTime, JobTDate, PurgedFiles) "
"SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles "
jobid,
date,
filesetid);
+#endif
if (!db_sql_query(mdb, query.c_str(), NULL, NULL)) {
goto bail_out;
}
// "AND FileSet.FileSet= '%s' "
// "AND Client.Name = '%s' "
"AND StartTime<'%s' "
+#if HAVE_INGRES
+#else
+ "ORDER BY Job.JobTDate DESC FETCH FIRST 1 ROW ONLY",
+#endif
"ORDER BY Job.JobTDate DESC LIMIT 1",
jr->Name,
// edit_uint64(jr->ClientId, clientid),
POOL_MEM str_jobids(PM_MESSAGE);
if (limit > 0) {
+#if HAVE_INGRES
+ Mmsg(str_limit, " FETCH FIRST %d ROWS ONLY", limit);
+#else
Mmsg(str_limit, " LIMIT %d", limit);
+#endif
}
if (JobIds && JobIds[0]) {
char limit[100];
db_lock(mdb);
if (jr->limit > 0) {
+#if HAVE_INGRES
+ snprintf(limit, sizeof(limit), " FETCH FIRST %d ROWS ONLY", jr->limit);
+#else
snprintf(limit, sizeof(limit), " LIMIT %d", jr->limit);
+#endif
} else {
limit[0] = 0;
}
*/
static int test_handler(void *ctx, int num_fields, char **row)
{
- Dmsg2(200, " Values are %d, %s\n", str_to_int64(row[0]), row[1]);
+ Pmsg2(0, " Values are %d, %s\n", str_to_int64(row[0]), row[1]);
return 0;
}
*/
static int string_handler(void *ctx, int num_fields, char **row)
{
- Dmsg1(200, " Value is >>%s<<\n", row[0]);
+ Pmsg1(0, " Value is >>%s<<\n", row[0]);
return 0;
}
if (verbose) {
Pmsg2(000, _("Using Database: %s, User: %s\n"), db_name, db_user);
}
-
-
- /* simple CRUD test including create/drop table */
+ /*
+ * simple CRUD test including create/drop table
+ */
Pmsg0(0, "\nsimple CRUD test...\n\n");
-
- Dmsg0(200, "DB-Statement: CREATE TABLE t1 ( c1 integer, c2 varchar(29))\n");
- if (!db_sql_query(db, "CREATE TABLE t1 ( c1 integer, c2 varchar(29))", NULL, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("CREATE-Stmt went wrong\n"));
- }
-
- Dmsg0(200, "DB-Statement: INSERT INTO t1 VALUES (1, 'foo')\n");
- if (!db_sql_query(db, "INSERT INTO t1 VALUES (1, 'foo')", NULL, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("INSERT-Stmt went wrong\n"));
- }
-
- Dmsg0(200, "DB-Statement: SELECT c1,c2 FROM t1 (should be 1, foo)\n");
- if (!db_sql_query(db, "SELECT c1,c2 FROM t1", test_handler, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("SELECT-Stmt went wrong\n"));
- }
-
- Dmsg0(200, "DB-Statement: UPDATE t1 SET c2='bar' WHERE c1=1\n");
- if (!db_sql_query(db, "UPDATE t1 SET c2='bar' WHERE c1=1", NULL, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("UPDATE-Stmt went wrong\n"));
- }
-
- Dmsg0(200, "DB-Statement: SELECT * FROM t1 (should be 1, bar)\n");
- if (!db_sql_query(db, "SELECT * FROM t1", test_handler, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("SELECT-Stmt went wrong\n"));
- }
-
- Dmsg0(200, "DB-Statement: DELETE FROM t1 WHERE c2 LIKE '\%r'\n");
- if (!db_sql_query(db, "DELETE FROM t1 WHERE c2 LIKE '%r'", NULL, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("DELETE-Stmt went wrong\n"));
- }
-
- Dmsg0(200, "DB-Statement: SELECT * FROM t1 (should be 0 rows)\n");
- if (!db_sql_query(db, "SELECT * FROM t1", test_handler, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("SELECT-Stmt went wrong\n"));
+ const char *stmt1[8] = {
+ "CREATE TABLE t1 ( c1 integer, c2 varchar(29))",
+ "INSERT INTO t1 VALUES (1, 'foo')",
+ "SELECT c1,c2 FROM t1",
+ "UPDATE t1 SET c2='bar' WHERE c1=1",
+ "SELECT * FROM t1",
+ "DELETE FROM t1 WHERE c2 LIKE '\%r'",
+ "SELECT * FROM t1",
+ "DROP TABLE t1"
+ };
+ int (*hndl1[8])(void*,int,char**) = {
+ NULL,
+ NULL,
+ test_handler,
+ NULL,
+ test_handler,
+ NULL,
+ test_handler,
+ NULL
+ };
+
+ for (int i=0; i<8; ++i) {
+ Pmsg1(0, "DB-Statement: %s\n",stmt1[i]);
+ if (!db_sql_query(db, stmt1[i], hndl1[i], NULL)) {
+ Emsg0(M_ERROR_TERM, 0, _("Stmt went wrong\n"));
+ }
}
- Dmsg0(200, "DB-Statement: DROP TABLE t1\n");
- if (!db_sql_query(db, "DROP TABLE t1", NULL, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("DROP-Stmt went wrong\n"));
- }
/*
- * simple SELECT test without tables
+ * simple SELECT tests without tables
*/
-
- Dmsg0(200, "DB-Statement: SELECT 'Test of simple SELECT!'\n");
- if (!db_sql_query(db, "SELECT 'Test of simple SELECT!'", string_handler, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("SELECT-Stmt went wrong\n"));
- }
-
- Dmsg0(200, "DB-Statement: SELECT 'Test of simple SELECT!' as Text\n");
- if (!db_sql_query(db, "SELECT 'Test of simple SELECT!' as Text", string_handler, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("SELECT-Stmt went wrong\n"));
+ Pmsg0(0, "\nsimple SELECT tests without tables...\n\n");
+ const char *stmt2[8] = {
+ "SELECT 'Test of simple SELECT!'",
+ "SELECT 'Test of simple SELECT!' as Text",
+ "SELECT VARCHAR(LENGTH('Test of simple SELECT!'))",
+ "SELECT DBMSINFO('_version')",
+ "SELECT 'This is a ''quoting'' test with single quotes'",
+ "SELECT 'This is a \"quoting\" test with double quotes'",
+ "SELECT null",
+ "SELECT ''"
+ };
+ int (*hndl2[8])(void*,int,char**) = {
+ string_handler,
+ string_handler,
+ string_handler,
+ string_handler,
+ string_handler,
+ string_handler,
+ string_handler,
+ string_handler
+ };
+
+ for (int i=0; i<8; ++i) {
+ Pmsg1(0, "DB-Statement: %s\n",stmt2[i]);
+ if (!db_sql_query(db, stmt2[i], hndl2[i], NULL)) {
+ Emsg0(M_ERROR_TERM, 0, _("Stmt went wrong\n"));
+ }
}
- Dmsg0(200, "DB-Statement: SELECT VARCHAR(LENGTH('Test of simple SELECT!'))\n");
- if (!db_sql_query(db, "SELECT VARCHAR(LENGTH('Test of simple SELECT!'))", string_handler, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("SELECT-Stmt went wrong\n"));
+ /*
+ * testing aggregates like avg, max, sum
+ */
+ Pmsg0(0, "\ntesting aggregates...\n\n");
+ const char *stmt[11] = {
+ "CREATE TABLE t1 (c1 integer, c2 varchar(29))",
+ "INSERT INTO t1 VALUES (1,'foo')",
+ "INSERT INTO t1 VALUES (2,'bar')",
+ "INSERT INTO t1 VALUES (3,'fun')",
+ "INSERT INTO t1 VALUES (4,'egg')",
+ "SELECT max(c1) from t1",
+ "SELECT sum(c1) from t1",
+ "INSERT INTO t1 VALUES (5,NULL)",
+ "SELECT count(*) from t1",
+ "SELECT count(c2) from t1",
+ "DROP TABLE t1"
+ };
+ int (*hndl[11])(void*,int,char**) = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ string_handler,
+ string_handler,
+ NULL,
+ string_handler,
+ string_handler,
+ NULL
+ };
+
+ for (int i=0; i<11; ++i) {
+ Pmsg1(0, "DB-Statement: %s\n",stmt[i]);
+ if (!db_sql_query(db, stmt[i], hndl[i], NULL)) {
+ Emsg0(M_ERROR_TERM, 0, _("Stmt went wrong\n"));
+ }
}
- Dmsg0(200, "DB-Statement: SELECT DBMSINFO('_version')\n");
- if (!db_sql_query(db, "SELECT DBMSINFO('_version')", string_handler, NULL)) {
- Emsg0(M_ERROR_TERM, 0, _("SELECT-Stmt went wrong\n"));
- }
/*
* datatypes test
WIN32_PORT=9102
# Win32 Client password
WIN32_PASSWORD="zzzzz"
-# Where the win32 client will have to contact the SD
-WIN32_STORE_ADDR="zzzz"