+ pr->PoolId = sql_insert_id(mdb, NT_("Pool"));
+ stat = true;
+ }
+ db_unlock(mdb);
+ return stat;
+}
+
+/*
+ * Create Unique Device record
+ * Returns: false on failure
+ * true on success
+ */
+bool
+db_create_device_record(JCR *jcr, B_DB *mdb, DEVICE_DBR *dr)
+{
+ bool ok;
+ char ed1[30], ed2[30];
+
+ Dmsg0(200, "In create Device\n");
+ db_lock(mdb);
+ Mmsg(mdb->cmd, "SELECT DeviceId,Name FROM Device WHERE Name='%s'", dr->Name);
+ Dmsg1(200, "selectdevice: %s\n", mdb->cmd);
+
+ if (QUERY_DB(jcr, mdb, mdb->cmd)) {
+ mdb->num_rows = sql_num_rows(mdb);
+ if (mdb->num_rows > 0) {
+ Mmsg1(&mdb->errmsg, _("Device record %s already exists\n"), dr->Name);
+ sql_free_result(mdb);
+ db_unlock(mdb);
+ return false;
+ }
+ sql_free_result(mdb);
+ }
+
+ /* Must create it */
+ Mmsg(mdb->cmd,
+"INSERT INTO Device (Name,MediaTypeId,StorageId) VALUES ('%s',%s,%s)",
+ dr->Name,
+ edit_uint64(dr->MediaTypeId, ed1),
+ edit_int64(dr->StorageId, ed2));
+ Dmsg1(200, "Create Device: %s\n", mdb->cmd);
+ if (!INSERT_DB(jcr, mdb, mdb->cmd)) {
+ Mmsg2(&mdb->errmsg, _("Create db Device record %s failed: ERR=%s\n"),
+ mdb->cmd, sql_strerror(mdb));
+ dr->DeviceId = 0;
+ ok = false;
+ } else {
+ dr->DeviceId = sql_insert_id(mdb, NT_("Device"));
+ ok = true;
+ }
+ db_unlock(mdb);
+ return ok;
+}
+
+
+
+/*
+ * Create a Unique record for Storage -- no duplicates
+ * Returns: false on failure
+ * true on success with id in sr->StorageId
+ */
+bool db_create_storage_record(JCR *jcr, B_DB *mdb, STORAGE_DBR *sr)
+{
+ SQL_ROW row;
+ bool ok;
+
+ db_lock(mdb);
+ Mmsg(mdb->cmd, "SELECT StorageId,AutoChanger FROM Storage WHERE Name='%s'", sr->Name);
+
+ sr->StorageId = 0;
+ sr->created = false;
+ if (QUERY_DB(jcr, mdb, mdb->cmd)) {
+ mdb->num_rows = sql_num_rows(mdb);
+ /* If more than one, report error, but return first row */
+ if (mdb->num_rows > 1) {
+ Mmsg1(&mdb->errmsg, _("More than one Storage record!: %d\n"), (int)(mdb->num_rows));
+ Jmsg(jcr, M_ERROR, 0, "%s", mdb->errmsg);
+ }
+ if (mdb->num_rows >= 1) {
+ if ((row = sql_fetch_row(mdb)) == NULL) {
+ Mmsg1(&mdb->errmsg, _("error fetching Storage row: %s\n"), sql_strerror(mdb));
+ Jmsg(jcr, M_ERROR, 0, "%s", mdb->errmsg);
+ sql_free_result(mdb);
+ db_unlock(mdb);
+ return false;
+ }
+ sr->StorageId = str_to_int64(row[0]);
+ sr->AutoChanger = atoi(row[1]); /* bool */
+ sql_free_result(mdb);
+ db_unlock(mdb);
+ return true;
+ }
+ sql_free_result(mdb);
+ }
+
+ /* Must create it */
+ Mmsg(mdb->cmd, "INSERT INTO Storage (Name,AutoChanger)"
+ " VALUES ('%s',%d)", sr->Name, sr->AutoChanger);
+
+ if (!INSERT_DB(jcr, mdb, mdb->cmd)) {
+ Mmsg2(&mdb->errmsg, _("Create DB Storage record %s failed. ERR=%s\n"),
+ mdb->cmd, sql_strerror(mdb));
+ Jmsg(jcr, M_ERROR, 0, "%s", mdb->errmsg);
+ ok = false;
+ } else {
+ sr->StorageId = sql_insert_id(mdb, NT_("Storage"));
+ sr->created = true;
+ ok = true;
+ }
+ db_unlock(mdb);
+ return ok;
+}
+
+
+/*
+ * Create Unique MediaType record
+ * Returns: false on failure
+ * true on success
+ */
+bool
+db_create_mediatype_record(JCR *jcr, B_DB *mdb, MEDIATYPE_DBR *mr)
+{
+ bool stat;
+
+ Dmsg0(200, "In create mediatype\n");
+ db_lock(mdb);
+ Mmsg(mdb->cmd, "SELECT MediaTypeId,MediaType FROM MediaType WHERE MediaType='%s'", mr->MediaType);
+ Dmsg1(200, "selectmediatype: %s\n", mdb->cmd);
+
+ if (QUERY_DB(jcr, mdb, mdb->cmd)) {
+ mdb->num_rows = sql_num_rows(mdb);
+ if (mdb->num_rows > 0) {
+ Mmsg1(&mdb->errmsg, _("mediatype record %s already exists\n"), mr->MediaType);
+ sql_free_result(mdb);
+ db_unlock(mdb);
+ return false;
+ }
+ sql_free_result(mdb);
+ }
+
+ /* Must create it */
+ Mmsg(mdb->cmd,
+"INSERT INTO MediaType (MediaType,ReadOnly) "
+"VALUES ('%s',%d)",
+ mr->MediaType,
+ mr->ReadOnly);
+ Dmsg1(200, "Create mediatype: %s\n", mdb->cmd);
+ if (!INSERT_DB(jcr, mdb, mdb->cmd)) {
+ Mmsg2(&mdb->errmsg, _("Create db mediatype record %s failed: ERR=%s\n"),
+ mdb->cmd, sql_strerror(mdb));
+ mr->MediaTypeId = 0;
+ stat = false;
+ } else {
+ mr->MediaTypeId = sql_insert_id(mdb, NT_("MediaType"));
+ stat = true;