1 #ifndef NM_DATABASE_H_ 2 #define NM_DATABASE_H_ 3 4 #include <nm_vector.h> 5 #include <stdbool.h> 6 7 #include <sqlite3.h> 8 9 #define NM_DB_VERSION "17" 10 11 //@TODO Those queries should have constant naming convention and some kind of sorting 12 static const char NM_GET_VMS_SQL[] = \ 13 "SELECT name FROM vms ORDER BY name ASC"; 14 15 static const char NM_GET_VMS_FILTER_GROUP_SQL[] = \ 16 "SELECT name FROM vms WHERE team='%s' ORDER BY name ASC"; 17 18 static const char NM_CLONE_VMS_SQL[] = \ 19 "INSERT INTO vms SELECT NULL, '%s', mem, smp, kvm, hcpu, '%d', arch, iso, " \ 20 "install, usb, usbid, bios, kernel, mouse_override, kernel_append, tty_path, " \ 21 "socket_path, initrd, machine, fs9p_enable, fs9p_path, fs9p_name, usb_type, " \ 22 "spice, debug_port, debug_freeze, cmdappend, team, display_type FROM vms WHERE name='%s'"; 23 24 static const char NM_RESET_LOAD_SQL[] = \ 25 "UPDATE vmsnapshots SET load='0' WHERE vm_name='%s'"; 26 27 static const char NM_USB_GET_SQL[] = \ 28 "SELECT * FROM usb WHERE vm_name='%s'"; 29 30 static const char NM_USB_ADD_SQL[] = \ 31 "INSERT INTO usb(vm_name, dev_name, vendor_id, product_id, serial) " \ 32 "VALUES ('%s', '%s', '%s', '%s', '%s')"; 33 34 static const char NM_USB_DELETE_SQL[] = \ 35 "DELETE FROM usb WHERE vm_name='%s' AND dev_name='%s' " \ 36 "AND vendor_id='%s' AND product_id='%s' AND serial='%s'"; 37 38 static const char NM_USB_CHECK_SQL[] = \ 39 "SELECT usbid FROM vms WHERE name='%s'"; 40 41 static const char NM_DEL_DRIVES_SQL[] = \ 42 "DELETE FROM drives WHERE vm_name='%s'"; 43 44 static const char NM_DEL_DRIVE_SQL[] = \ 45 "DELETE FROM drives WHERE vm_name='%s' AND drive_name='%s'"; 46 47 static const char NM_DEL_VMSNAP_SQL[] = \ 48 "DELETE FROM vmsnapshots WHERE vm_name='%s'"; 49 50 static const char NM_DEL_IFS_SQL[] = \ 51 "DELETE FROM ifaces WHERE vm_name='%s'"; 52 53 static const char NM_DEL_USB_SQL[] = \ 54 "DELETE FROM usb WHERE vm_name='%s'"; 55 56 static const char NM_DEL_VM_SQL[] = \ 57 "DELETE FROM vms WHERE name='%s'"; 58 59 static const char NM_USB_EXISTS_SQL[] = \ 60 "SELECT id FROM usb WHERE vm_name='%s' AND dev_name='%s' " \ 61 "AND vendor_id='%s' AND product_id='%s' AND serial='%s'"; 62 63 static const char NM_VM_GET_LIST_SQL[] = \ 64 "SELECT * FROM vms WHERE name='%s'"; 65 66 static const char NM_VM_GET_IFACES_SQL [] = \ 67 "SELECT if_name, mac_addr, if_drv, ipv4_addr, vhost, " \ 68 "macvtap, parent_eth, altname, netuser, hostfwd, smb FROM ifaces " \ 69 "WHERE vm_name='%s' ORDER BY if_name ASC"; 70 71 static const char NM_VM_GET_DRIVES_SQL[] = \ 72 "SELECT drive_name, drive_drv, capacity, boot, discard " \ 73 "FROM drives WHERE vm_name='%s' ORDER BY id ASC"; 74 75 static const char NM_VM_GET_ADDDRIVES_SQL[] = \ 76 "SELECT drive_name, capacity FROM drives WHERE vm_name='%s' " \ 77 "AND boot='0'"; 78 79 static const char NM_SNAP_GET_NAME_SQL[] = \ 80 "SELECT * FROM vmsnapshots WHERE vm_name='%s' " \ 81 "AND snap_name='%s'"; 82 83 static const char NM_GET_SNAPS_ALL_SQL[] = \ 84 "SELECT * FROM vmsnapshots WHERE vm_name='%s' " \ 85 "ORDER BY timestamp ASC"; 86 87 static const char NM_GET_SNAPS_NAME_SQL[] = \ 88 "SELECT snap_name FROM vmsnapshots WHERE vm_name='%s' " \ 89 "ORDER BY timestamp ASC"; 90 91 static const char NM_SNAP_UPDATE_LOAD_SQL[] = \ 92 "UPDATE vmsnapshots SET load='1' " \ 93 "WHERE vm_name='%s' AND snap_name='%s'"; 94 95 static const char NM_DELETE_SNAP_SQL[] = \ 96 "DELETE FROM vmsnapshots WHERE vm_name='%s' " \ 97 "AND snap_name='%s'"; 98 99 static const char NM_INSERT_SNAP_SQL[] = \ 100 "INSERT INTO vmsnapshots(vm_name, snap_name, load, timestamp) " \ 101 "VALUES('%s', '%s', '%d', DATETIME('now','localtime'))"; 102 103 static const char NM_UPDATE_SNAP_SQL[] = \ 104 "UPDATE vmsnapshots SET load='%d', " \ 105 "timestamp=DATETIME('now','localtime') " \ 106 "WHERE vm_name='%s' AND snap_name='%s'"; 107 108 static const char NM_CHECK_SNAP_SQL[] = \ 109 "SELECT id FROM snapshots WHERE vm_name='%s'"; 110 111 static const char NM_GET_BOOT_DRIVE_SQL[] = \ 112 "SELECT drive_name FROM drives " \ 113 "WHERE vm_name='%s' AND boot='1'"; 114 115 static const char NM_SELECT_DRIVE_NAMES_SQL[] = \ 116 "SELECT drive_name FROM drives WHERE vm_name='%s'"; 117 118 static const char NM_GET_VETH_SQL[] = \ 119 "SELECT l_name, r_name FROM veth"; 120 121 static const char NM_LAN_GET_VETH_SQL[] = \ 122 "SELECT (l_name || '<->' || r_name) FROM veth ORDER by l_name ASC"; 123 124 static const char NM_LAN_ADD_VETH_SQL[] = \ 125 "INSERT INTO veth(l_name, r_name) VALUES ('%s', '%s')"; 126 127 static const char NM_LAN_CHECK_NAME_SQL[] = \ 128 "SELECT id FROM veth WHERE l_name='%s' OR r_name='%s'"; 129 130 static const char NM_LAN_DEL_VETH_SQL[] = \ 131 "DELETE FROM veth WHERE l_name='%s'"; 132 133 static const char NM_GET_IFACES_SQL[] = \ 134 "SELECT if_name FROM ifaces WHERE vm_name='%s'"; 135 136 static const char NM_GET_IFACE_SQL[] = \ 137 "SELECT id FROM ifaces WHERE vm_name='%s' AND if_name='%s' AND if_drv='%s'"; 138 139 static const char NM_DEL_IFACE_SQL[] = \ 140 "DELETE FROM ifaces WHERE vm_name='%s' AND if_name='%s'"; 141 142 static const char NM_GET_IFACES_MACS[] = \ 143 "SELECT mac_addr FROM ifaces"; 144 145 static const char NM_GET_IFMAP_SQL[] = \ 146 "SELECT vm_name, if_name FROM ifaces WHERE parent_eth='%s' " \ 147 "OR parent_eth='%s'"; 148 149 static const char NM_GET_IFMAPGR_SQL[] = \ 150 "SELECT vm_name, if_name FROM ifaces JOIN vms ON " \ 151 "vm_name=name WHERE team='%s' AND (parent_eth='%s' OR parent_eth='%s')"; 152 153 static const char NM_GET_GROUPS_SQL[] = \ 154 "SELECT DISTINCT team FROM vms WHERE team IS NOT NULL"; 155 156 static const char NM_LAN_VETH_INF_SQL[] = \ 157 "SELECT if_name FROM ifaces WHERE parent_eth='%s'"; 158 159 static const char NM_LAN_VETH_DEP_SQL[] = \ 160 "UPDATE ifaces SET macvtap='0', parent_eth='' " \ 161 "WHERE parent_eth='%s' OR parent_eth='%s'"; 162 163 static const char NM_GET_VMSNAP_LOAD_SQL[] = \ 164 "SELECT snap_name FROM vmsnapshots WHERE vm_name='%s' " \ 165 "AND load='1'"; 166 167 static const char NM_USB_UPDATE_STATE_SQL[] = \ 168 "UPDATE vms SET usbid='%s' WHERE name='%s'"; 169 170 static const char NM_VMCTL_GET_VNC_PORT_SQL[] = \ 171 "SELECT vnc, spice FROM vms WHERE name='%s'"; 172 173 static const char NM_GET_DB_VERSION_SQL[] = \ 174 "PRAGMA user_version"; 175 176 typedef sqlite3 nm_sqlite_t; 177 178 typedef struct { 179 nm_sqlite_t *handler; 180 bool in_transaction; 181 } db_conn_t; 182 183 #define NM_INIT_DB_CONN (db_conn_t) {NULL, false} 184 185 void nm_db_init(void); 186 void nm_db_select(const char *query, nm_vect_t *v); 187 void nm_db_edit(const char *query); 188 bool nm_db_in_transaction(); 189 void nm_db_begin_transaction(); 190 void nm_db_atomic(const char *query); 191 void nm_db_commit(); 192 void nm_db_rollback(); 193 void nm_db_close(void); 194 195 enum select_main_idx { 196 NM_SQL_ID = 0, 197 NM_SQL_NAME, 198 NM_SQL_MEM, 199 NM_SQL_SMP, 200 NM_SQL_KVM, 201 NM_SQL_HCPU, 202 NM_SQL_VNC, 203 NM_SQL_ARCH, 204 NM_SQL_ISO, 205 NM_SQL_INST, 206 NM_SQL_USBF, 207 NM_SQL_USBD, 208 NM_SQL_BIOS, 209 NM_SQL_KERN, 210 NM_SQL_OVER, 211 NM_SQL_KAPP, 212 NM_SQL_TTY, 213 NM_SQL_SOCK, 214 NM_SQL_INIT, 215 NM_SQL_MACH, 216 NM_SQL_9FLG, 217 NM_SQL_9PTH, 218 NM_SQL_9ID, 219 NM_SQL_USBT, 220 NM_SQL_SPICE, 221 NM_SQL_DEBP, 222 NM_SQL_DEBF, 223 NM_SQL_ARGS, 224 NM_SQL_GROUP, 225 NM_SQL_DISPLAY, 226 NM_VM_IDX_COUNT 227 }; 228 229 enum select_ifs_idx { 230 NM_SQL_IF_NAME = 0, 231 NM_SQL_IF_MAC, 232 NM_SQL_IF_DRV, 233 NM_SQL_IF_IP4, 234 NM_SQL_IF_VHO, 235 NM_SQL_IF_MVT, 236 NM_SQL_IF_PET, 237 NM_SQL_IF_ALT, 238 NM_SQL_IF_USR, 239 NM_SQL_IF_FWD, 240 NM_SQL_IF_SMB, 241 NM_IFS_IDX_COUNT 242 }; 243 244 enum select_drive_idx { 245 NM_SQL_DRV_NAME = 0, 246 NM_SQL_DRV_TYPE, 247 NM_SQL_DRV_SIZE, 248 NM_SQL_DRV_BOOT, 249 NM_SQL_DRV_DISC, 250 NM_DRV_IDX_COUNT 251 }; 252 253 enum select_usb_idx { 254 NM_SQL_USB_ID = 0, 255 NM_SQL_USB_VMNAME, 256 NM_SQL_USB_NAME, 257 NM_SQL_USB_VID, 258 NM_SQL_USB_PID, 259 NM_SQL_USB_SERIAL, 260 NM_USB_IDX_COUNT 261 }; 262 263 #endif /* NM_DATABASE_H_ */ 264 /* vim:set ts=4 sw=4: */ 265