From: Eric Bollengier Date: Mon, 20 Jul 2020 11:25:16 +0000 (+0200) Subject: Use DROP TABLE IF EXISTS in cats library to avoid errors with missing tables X-Git-Tag: Release-11.3.2~1368 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a808b5b7d1dcc8bdfc84a00fca70efeacc55e67e;p=thirdparty%2Fbacula.git Use DROP TABLE IF EXISTS in cats library to avoid errors with missing tables --- diff --git a/bacula/src/cats/bvfs.c b/bacula/src/cats/bvfs.c index b04a1c47ba..1b01fc06aa 100644 --- a/bacula/src/cats/bvfs.c +++ b/bacula/src/cats/bvfs.c @@ -1341,7 +1341,7 @@ bool Bvfs::drop_restore_list(char *output_table) { POOL_MEM query; if (check_temp(output_table)) { - Mmsg(query, "DROP TABLE %s", output_table); + Mmsg(query, "DROP TABLE IF EXISTS %s", output_table); db->bdb_sql_query(query.c_str(), NULL, NULL); return true; } @@ -1473,7 +1473,7 @@ bool Bvfs::insert_hardlinks(char *output_table) goto bail_out; } - Mmsg(query, "DROP TABLE h%s", output_table); + Mmsg(query, "DROP TABLE IF EXISTS h%s", output_table); if (!db->bdb_sql_query(query.c_str(), NULL, NULL)) { Dmsg1(dbglevel, "Can't execute query=%s\n", query.c_str()); goto bail_out; @@ -1518,10 +1518,10 @@ bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *output_table) } /* Cleanup old tables first */ - Mmsg(query, "DROP TABLE btemp%s", output_table); + Mmsg(query, "DROP TABLE IF EXISTS btemp%s", output_table); db->bdb_sql_query(query.c_str()); - Mmsg(query, "DROP TABLE %s", output_table); + Mmsg(query, "DROP TABLE IF EXISTS %s", output_table); db->bdb_sql_query(query.c_str()); /* Now start the transaction to protect ourself from other commands */ @@ -1713,10 +1713,10 @@ bool Bvfs::compute_restore_list(char *fileid, char *dirid, char *output_table) bail_out: if (!ret) { - Mmsg(query, "DROP TABLE %s", output_table); + Mmsg(query, "DROP TABLE IF EXISTS %s", output_table); db->bdb_sql_query(query.c_str()); } - Mmsg(query, "DROP TABLE btemp%s", output_table); + Mmsg(query, "DROP TABLE IF EXISTS btemp%s", output_table); db->bdb_sql_query(query.c_str()); db->bdb_end_transaction(jcr); /* the destination table might be visible now */ db->bdb_unlock(); diff --git a/bacula/src/cats/sql_cmds.c b/bacula/src/cats/sql_cmds.c index 5c541858da..8ad312d2bc 100644 --- a/bacula/src/cats/sql_cmds.c +++ b/bacula/src/cats/sql_cmds.c @@ -91,7 +91,7 @@ const char *sel_JobMedia = /* Delete temp tables and indexes */ const char *drop_deltabs[] = { - "DROP TABLE DelCandidates", + "DROP TABLE IF EXISTS DelCandidates", NULL}; const char *create_delindex = "CREATE INDEX DelInx1 ON DelCandidates (JobId)"; @@ -122,8 +122,8 @@ const char *uar_sel_files = "FROM File JOIN Path USING (PathId) " "WHERE File.JobId IN (%s)"; -const char *uar_del_temp = "DROP TABLE temp"; -const char *uar_del_temp1 = "DROP TABLE temp1"; +const char *uar_del_temp = "DROP TABLE IF EXISTS temp"; +const char *uar_del_temp1 = "DROP TABLE IF EXISTS temp1"; const char *uar_last_full = "INSERT INTO temp1 SELECT Job.JobId,JobTdate " @@ -410,7 +410,7 @@ const char *select_recent_version[] = MyISAM 5.0 and 5.1 are unable to run further queries in this mode */ static const char *create_temp_accurate_jobids_default = - "CREATE TABLE btemp3%s AS " + "CREATE TABLE btemp3%s AS (" "SELECT JobId, StartTime, EndTime, JobTDate, PurgedFiles " "FROM Job JOIN FileSet USING (FileSetId) " "WHERE ClientId = %s " @@ -418,7 +418,7 @@ static const char *create_temp_accurate_jobids_default = "AND StartTime<'%s' " "AND FileSet.FileSet=(SELECT FileSet FROM FileSet WHERE FileSetId = %s) " " %s " /* Any filter */ - "ORDER BY Job.JobTDate DESC LIMIT 1"; + "ORDER BY Job.JobTDate DESC LIMIT 1)"; const char *create_temp_accurate_jobids[] = { @@ -435,7 +435,7 @@ const char *create_temp_basefile[] = /* MySQL */ "CREATE TEMPORARY TABLE basefile%lld" "(Path BLOB NOT NULL, Name BLOB NOT NULL," - " INDEX (Path(255), Name(255)))", + " PRIMARY (Path(255), Name(255)))", /* PostgreSQL */ "CREATE TEMPORARY TABLE basefile%lld" "(Path TEXT, Name TEXT)", @@ -573,6 +573,7 @@ const char *uar_create_temp[] = { /* MySQL */ "CREATE TEMPORARY TABLE temp (" + "PKEY INTEGER UNSIGNED NOT NULL AUTO_INCREMENT," "JobId INTEGER UNSIGNED NOT NULL," "JobTDate BIGINT UNSIGNED," "ClientId INTEGER UNSIGNED," @@ -583,7 +584,7 @@ const char *uar_create_temp[] = "VolumeName TEXT," "StartFile INTEGER UNSIGNED," "VolSessionId INTEGER UNSIGNED," - "VolSessionTime INTEGER UNSIGNED)", + "VolSessionTime INTEGER UNSIGNED) PRIMARY KEY (PKEY)", /* PostgreSQL */ "CREATE TEMPORARY TABLE temp (" diff --git a/bacula/src/cats/sql_create.c b/bacula/src/cats/sql_create.c index 30f7783d20..02c7e8a83b 100644 --- a/bacula/src/cats/sql_create.c +++ b/bacula/src/cats/sql_create.c @@ -895,7 +895,7 @@ bool bdb_write_batch_file_records(JCR *jcr) retval = true; bail_out: - jcr->db_batch->bdb_sql_query("DROP TABLE batch", NULL,NULL); + jcr->db_batch->bdb_sql_query("DROP TABLE IF EXISTS batch", NULL,NULL); jcr->batch_started = false; return retval; @@ -1093,10 +1093,10 @@ bool BDB::bdb_create_base_file_attributes_record(JCR *jcr, ATTR_DBR *ar) static void db_cleanup_base_file(JCR *jcr, BDB *mdb) { POOL_MEM buf(PM_MESSAGE); - Mmsg(buf, "DROP TABLE new_basefile%lld", (uint64_t) jcr->JobId); + Mmsg(buf, "DROP TABLE IF EXISTS new_basefile%lld", (uint64_t) jcr->JobId); mdb->bdb_sql_query(buf.c_str(), NULL, NULL); - Mmsg(buf, "DROP TABLE basefile%lld", (uint64_t) jcr->JobId); + Mmsg(buf, "DROP TABLE IF EXISTS basefile%lld", (uint64_t) jcr->JobId); mdb->bdb_sql_query(buf.c_str(), NULL, NULL); } diff --git a/bacula/src/cats/sql_get.c b/bacula/src/cats/sql_get.c index 74b6048b3d..22eaeb7e42 100644 --- a/bacula/src/cats/sql_get.c +++ b/bacula/src/cats/sql_get.c @@ -1554,7 +1554,7 @@ bool BDB::bdb_get_accurate_jobids(JCR *jcr, ret = true; bail_out: - Mmsg(query, "DROP TABLE btemp3%s", jobid); + Mmsg(query, "DROP TABLE IF EXISTS btemp3%s", jobid); bdb_sql_query(query.c_str(), NULL, NULL); return ret;