00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _DATABASE_H
00009 #define _DATABASE_H
00010
00011 #include <sqlite3.h>
00012 #include <vdr/tools.h>
00013 #include "../common.h"
00014
00015 #define SQLITE_PRINT_STATEMENTS
00016 #define SQLITE_PRINT_FETCHES
00017 #define SQLITE_CASCADE_DELETES
00018
00019 #define PK_OBJECTS TOSTRING(1)
00020 #define PK_RESOURCES TOSTRING(2)
00021 #define PK_SEARCHCLASSES TOSTRING(3)
00022
00023 #define SQLITE_FIRST_CUSTOMID TOSTRING(100)
00024
00025 #define SQLITE_COLUMN_NAME_LENGTH 64
00026
00027 #define SQLITE_TABLE_RESOURCES "Resources"
00028 #define SQLITE_TABLE_OBJECTS "Objects"
00029 #define SQLITE_TABLE_ITEMS "Items"
00030 #define SQLITE_TABLE_CONTAINERS "Containers"
00031 #define SQLITE_TABLE_VIDEOITEMS "VideoItems"
00032 #define SQLITE_TABLE_AUDIOITEMS "AudioItems"
00033 #define SQLITE_TABLE_IMAGEITEMS "ImageItems"
00034 #define SQLITE_TABLE_VIDEOBROADCASTS "VideoBroadcasts"
00035 #define SQLITE_TABLE_AUDIOBROADCASTS "AudioBroadcasts"
00036 #define SQLITE_TABLE_MOVIES "Movies"
00037 #define SQLITE_TABLE_PHOTOS "Photos"
00038 #define SQLITE_TABLE_ALBUMS "Albums"
00039 #define SQLITE_TABLE_PLAYLISTS "Playlists"
00040 #define SQLITE_TABLE_SEARCHCLASS "SearchClass"
00041 #define SQLITE_TABLE_PRIMARY_KEYS "PrimaryKeys"
00042 #define SQLITE_TABLE_SYSTEM "System"
00043 #define SQLITE_TABLE_ITEMFINDER "ItemFinder"
00044
00045 #define SQLITE_TYPE_TEXT "TEXT"
00046 #define SQLITE_TYPE_INTEGER "INTEGER"
00047 #define SQLITE_TYPE_BOOL SQLITE_TYPE_INTEGER
00048 #define SQLITE_TYPE_DATE SQLITE_TYPE_TEXT
00049 #define SQLITE_TYPE_ULONG SQLITE_TYPE_INTEGER
00050 #define SQLITE_TYPE_LONG SQLITE_TYPE_INTEGER
00051 #define SQLITE_TYPE_UINTEGER SQLITE_TYPE_INTEGER
00052
00053 #define SQLITE_TRANSACTION_BEGIN "BEGIN IMMEDIATE TRANSACTION "
00054 #define SQLITE_TRANSACTION_END "COMMIT TRANSACTION"
00055 #define SQLITE_TRANSACTION_TYPE "ROLLBACK"
00056
00057 #define SQLITE_CONFLICT_CLAUSE "ON CONFLICT " SQLITE_TRANSACTION_TYPE
00058 #define SQLITE_PRIMARY_KEY SQLITE_TYPE_INTEGER " PRIMARY KEY"
00059 #define SQLITE_NOT_NULL "NOT NULL"
00060 #define SQLITE_UNIQUE "UNIQUE"
00061
00062 #define SQLITE_COL_OBJECTID "ObjectID"
00063 #define SQLITE_COL_PARENTID "ParentID"
00064 #define SQLITE_COL_TITLE "Title"
00065 #define SQLITE_COL_CREATOR "Creator"
00066 #define SQLITE_COL_CLASS "Class"
00067 #define SQLITE_COL_RESTRICTED "Restricted"
00068 #define SQLITE_COL_WRITESTATUS "WriteStatus"
00069 #define SQLITE_COL_REFERENCEID "RefID"
00070 #define SQLITE_COL_CLASSDERIVED "IncludeDerived"
00071 #define SQLITE_COL_SEARCHABLE "Searchable"
00072 #define SQLITE_COL_CONTAINER_UID "UpdateID"
00073 #define SQLITE_COL_RESOURCEID "ResourceID"
00074 #define SQLITE_COL_PROTOCOLINFO "ProtocolInfo"
00075 #define SQLITE_COL_CONTENTTYPE "ContentType"
00076 #define SQLITE_COL_RESOURCETYPE "ResourceType"
00077 #define SQLITE_COL_RESOURCE "Resource"
00078 #define SQLITE_COL_SIZE "Size"
00079 #define SQLITE_COL_DURATION "Duration"
00080 #define SQLITE_COL_BITRATE "Bitrate"
00081 #define SQLITE_COL_SAMPLEFREQUENCE "SampleFreq"
00082 #define SQLITE_COL_BITSPERSAMPLE "BitsPerSample"
00083 #define SQLITE_COL_NOAUDIOCHANNELS "NoAudioChannels"
00084 #define SQLITE_COL_COLORDEPTH "ColorDepth"
00085 #define SQLITE_COL_RESOLUTION "Resolution"
00086 #define SQLITE_COL_GENRE "Genre"
00087 #define SQLITE_COL_LONGDESCRIPTION "LongDescription"
00088 #define SQLITE_COL_PRODUCER "Producer"
00089 #define SQLITE_COL_RATING "Rating"
00090 #define SQLITE_COL_ACTOR "Actor"
00091 #define SQLITE_COL_DIRECTOR "Director"
00092 #define SQLITE_COL_DESCRIPTION "Description"
00093 #define SQLITE_COL_PUBLISHER "Publisher"
00094 #define SQLITE_COL_LANGUAGE "Language"
00095 #define SQLITE_COL_RELATION "Relation"
00096 #define SQLITE_COL_STORAGEMEDIUM "StorageMedium"
00097 #define SQLITE_COL_DVDREGIONCODE "DVDRegionCode"
00098 #define SQLITE_COL_CHANNELNAME "Channelname"
00099 #define SQLITE_COL_SCHEDULEDSTARTTIME "ScheduledStartTime"
00100 #define SQLITE_COL_SCHEDULEDENDTIME "ScheduledEndTime"
00101 #define SQLITE_COL_ICON "Icon"
00102 #define SQLITE_COL_REGION "Region"
00103 #define SQLITE_COL_CHANNELNR "ChannelNr"
00104 #define SQLITE_COL_RIGHTS "Rights"
00105 #define SQLITE_COL_RADIOCALLSIGN "CallSign"
00106 #define SQLITE_COL_RADIOSTATIONID "StationID"
00107 #define SQLITE_COL_RADIOBAND "Band"
00108 #define SQLITE_COL_CONTRIBUTOR "Contributor"
00109 #define SQLITE_COL_DATE "Date"
00110 #define SQLITE_COL_ALBUM "Album"
00111 #define SQLITE_COL_ARTIST "Artist"
00112 #define SQLITE_COL_DLNA_CONTAINERTYPE "DLNAContainer"
00113 #define SQLITE_COL_CHILDCOUNT "ChildCount"
00114 #define SQLITE_COL_ITEMFINDER "ItemFastID"
00115
00116 #define SQLITE_UPNP_OBJECTID SQLITE_COL_OBJECTID " " SQLITE_TYPE_INTEGER " " SQLITE_NOT_NULL " " SQLITE_CONFLICT_CLAUSE " "\
00117 SQLITE_UNIQUE " " SQLITE_CONFLICT_CLAUSE
00118
00119 #define SQLITE_INSERT_TRIGGER(TableA,TableB,Class) "CREATE TRIGGER IF NOT EXISTS "\
00120 TableA "_I_" TableB " "\
00121 "BEFORE INSERT ON "\
00122 TableB " "\
00123 "FOR EACH ROW BEGIN "\
00124 "SELECT CASE "\
00125 "WHEN ("\
00126 "((SELECT " SQLITE_COL_OBJECTID " FROM " TableA " "\
00127 "WHERE " SQLITE_COL_OBJECTID "=NEW." SQLITE_COL_OBJECTID " "\
00128 ") IS NULL) "\
00129 "OR "\
00130 "((SELECT " SQLITE_COL_OBJECTID " FROM " SQLITE_TABLE_OBJECTS " "\
00131 "WHERE " SQLITE_COL_OBJECTID "=NEW." SQLITE_COL_OBJECTID " "\
00132 "AND " SQLITE_COL_CLASS " LIKE '" Class "%%') IS NULL) "\
00133 ") THEN "\
00134 "RAISE(" SQLITE_TRANSACTION_TYPE ", "\
00135 "'INSERT on table " TableB " failed due constraint violation "\
00136 "on foreign key " SQLITE_COL_OBJECTID "'"\
00137 ") "\
00138 "END; END;"
00139
00140 #define SQLITE_UPDATE_TRIGGER(TableA,TableB,Class) "CREATE TRIGGER IF NOT EXISTS "\
00141 TableA "_U_" TableB " "\
00142 "BEFORE UPDATE ON "\
00143 TableB " "\
00144 "FOR EACH ROW BEGIN "\
00145 "SELECT CASE "\
00146 "WHEN ("\
00147 "((SELECT " SQLITE_COL_OBJECTID " FROM " TableA " "\
00148 "WHERE " SQLITE_COL_OBJECTID "=NEW." SQLITE_COL_OBJECTID " "\
00149 "AND " SQLITE_COL_CLASS " LIKE '" Class "%%') IS NULL)"\
00150 ") THEN "\
00151 "RAISE(" SQLITE_TRANSACTION_TYPE ", "\
00152 "'UPDATE on table " TableB " failed due constraint violation "\
00153 "on foreign key " SQLITE_COL_OBJECTID "'"\
00154 ") "\
00155 "END; END;"
00156
00157 #define SQLITE_INSERT_REFERENCE_TRIGGER(Table,Column) "CREATE TRIGGER IF NOT EXISTS "\
00158 Table "_I_" Table " "\
00159 "BEFORE INSERT ON " \
00160 Table " " \
00161 "FOR EACH ROW BEGIN "\
00162 "SELECT CASE "\
00163 "WHEN ( "\
00164 "((SELECT " SQLITE_COL_OBJECTID " FROM " Table " "\
00165 "WHERE " SQLITE_COL_OBJECTID " = NEW." Column ") IS NULL) "\
00166 "AND "\
00167 "(NEW." Column "!=-1)"\
00168 ")THEN "\
00169 "RAISE(" SQLITE_TRANSACTION_TYPE ", 'INSERT on table " Table " "\
00170 "violates foreign key \"" Column "\"') "\
00171 "END; END;"
00172
00173 #define SQLITE_UPDATE_REFERENCE_TRIGGER(Table,Column) "CREATE TRIGGER IF NOT EXISTS "\
00174 Table "_U_" Table " "\
00175 "BEFORE INSERT ON " \
00176 Table " " \
00177 "FOR EACH ROW BEGIN "\
00178 "SELECT CASE "\
00179 "WHEN ( "\
00180 "((SELECT " SQLITE_COL_OBJECTID " FROM " Table " "\
00181 "WHERE " SQLITE_COL_OBJECTID " = NEW." Column ") IS NULL) "\
00182 "AND "\
00183 "(NEW." Column "!=-1)"\
00184 ")THEN "\
00185 "RAISE(" SQLITE_TRANSACTION_TYPE ", 'UPDATE on table " Table " "\
00186 "violates foreign key \"" Column "\"') "\
00187 "END; END;"
00188
00189 #define SQLITE_DELETE_REFERENCE_TRIGGER(Table,Column) "CREATE TRIGGER IF NOT EXISTS "\
00190 Table "_D_" Table " " \
00191 "BEFORE DELETE ON " \
00192 Table " " \
00193 "FOR EACH ROW BEGIN "\
00194 "SELECT CASE "\
00195 "WHEN ("\
00196 "(SELECT " Column " FROM " Table " "\
00197 "WHERE " Column " = OLD." SQLITE_COL_OBJECTID ") IS NOT NULL"\
00198 ")THEN "\
00199 "RAISE(" SQLITE_TRANSACTION_TYPE ", 'DELETE on table " Table " "\
00200 "violates foreign key \"" Column "\"') "\
00201 "END; END;"
00202
00203 #ifdef SQLITE_CASCADE_DELETES
00204 #define SQLITE_DELETE_TRIGGER(TableA,TableB) "CREATE TRIGGER IF NOT EXISTS "\
00205 TableA "_D_" TableB " "\
00206 "BEFORE DELETE ON "\
00207 TableA " "\
00208 "FOR EACH ROW BEGIN "\
00209 "DELETE FROM " TableB " "\
00210 "WHERE " SQLITE_COL_OBJECTID "=OLD." SQLITE_COL_OBJECTID "; "\
00211 "END;"
00212
00213 #define SQLITE_DELETE_PARENT_TRIGGER "CREATE TRIGGER IF NOT EXISTS "\
00214 SQLITE_TABLE_OBJECTS "_D_" SQLITE_TABLE_OBJECTS " " \
00215 "BEFORE DELETE ON " \
00216 SQLITE_TABLE_OBJECTS " " \
00217 "FOR EACH ROW BEGIN "\
00218 "DELETE FROM " SQLITE_TABLE_OBJECTS " "\
00219 "WHERE " SQLITE_COL_PARENTID "=OLD." SQLITE_COL_OBJECTID "; "\
00220 "END;"
00221 #else
00222 #define SQLITE_DELETE_TRIGGER(TableA,TableB) "CREATE TRIGGER IF NOT EXISTS "\
00223 TableA "_D_" TableB " "\
00224 "BEFORE DELETE ON "\
00225 TableA " "\
00226 "FOR EACH ROW BEGIN "\
00227 "SELECT CASE "\
00228 "WHEN ("\
00229 "(SELECT " SQLITE_COL_OBJECTID " FROM " TableB " "\
00230 "WHERE " SQLITE_COL_OBJECTID "=OLD." SQLITE_COL_OBJECTID ") IS NOT NULL"\
00231 ") THEN "\
00232 "RAISE(" SQLITE_TRANSACTION_TYPE ", "\
00233 "'DELETE on table " TableA " failed due constraint violation "\
00234 "on foreign key " SQLITE_COL_OBJECTID "'"\
00235 ") "\
00236 "END; END;"
00237
00238 #define SQLITE_DELETE_PARENT_TRIGGER SQLITE_DELETE_REFERENCE_TRIGGER(SQLITE_TABLE_OBJECTS, SQLITE_COL_PARENTID)
00239 #endif
00240
00241
00242
00243
00244
00245
00246
00247 #define SQLITE_CREATE_TABLE_PRIMARY_KEYS "CREATE TABLE IF NOT EXISTS "\
00248 SQLITE_TABLE_PRIMARY_KEYS \
00249 "("\
00250 "KeyID " SQLITE_PRIMARY_KEY " " SQLITE_NOT_NULL ","\
00251 "Key " SQLITE_TYPE_INTEGER " " SQLITE_NOT_NULL\
00252 ");"\
00253 "INSERT OR IGNORE INTO "\
00254 SQLITE_TABLE_PRIMARY_KEYS \
00255 "(KeyID, Key) VALUES ("\
00256 PK_OBJECTS "," SQLITE_FIRST_CUSTOMID\
00257 ");"\
00258 "INSERT OR IGNORE INTO "\
00259 SQLITE_TABLE_PRIMARY_KEYS \
00260 "(KeyID, Key) VALUES ("\
00261 PK_RESOURCES ",0"\
00262 ");"\
00263 "INSERT OR IGNORE INTO "\
00264 SQLITE_TABLE_PRIMARY_KEYS \
00265 "(KeyID, Key) VALUES ("\
00266 PK_SEARCHCLASSES ",0"\
00267 ");"
00268
00269 #define SQLITE_TRIGGER_UPDATE_OBJECTID "CREATE TRIGGER IF NOT EXISTS "\
00270 SQLITE_TABLE_OBJECTS "_PK_UPDATE "\
00271 "AFTER INSERT ON "\
00272 SQLITE_TABLE_OBJECTS " "\
00273 "BEGIN "\
00274 "UPDATE " SQLITE_TABLE_PRIMARY_KEYS " SET Key=Key+1 WHERE KeyID=" PK_OBJECTS "; "\
00275 "END;"
00276
00277
00278
00279
00280
00281
00282
00283 #define SQLITE_CREATE_TABLE_SYSTEM "CREATE TABLE IF NOT EXISTS "\
00284 SQLITE_TABLE_SYSTEM " "\
00285 "("\
00286 "Key " SQLITE_TYPE_TEXT " " SQLITE_NOT_NULL " " SQLITE_UNIQUE ","\
00287 "Value " SQLITE_TYPE_TEXT " "\
00288 ");"
00289
00290 #define SQLITE_TRIGGER_UPDATE_SYSTEM "CREATE TRIGGER IF NOT EXISTS "\
00291 SQLITE_TABLE_SYSTEM "_VALUE_UPDATE "\
00292 "BEFORE UPDATE "\
00293 "ON " SQLITE_TABLE_SYSTEM " "\
00294 "WHEN ((SELECT Key FROM " SQLITE_TABLE_SYSTEM " WHERE Key=NEW.Key) IS NULL) "\
00295 "BEGIN INSERT INTO " SQLITE_TABLE_SYSTEM " (Key) VALUES (NEW.Key); END;"
00296
00297
00298
00299
00300
00301
00302
00303 #define SQLITE_CREATE_TABLE_ITEMFINDER "CREATE TABLE IF NOT EXISTS "\
00304 SQLITE_TABLE_ITEMFINDER " "\
00305 "("\
00306 SQLITE_UPNP_OBJECTID ","\
00307 SQLITE_COL_ITEMFINDER " " SQLITE_TYPE_TEXT " " SQLITE_NOT_NULL " " SQLITE_UNIQUE \
00308 ");"
00309
00310 #define SQLITE_TRIGGER_D_OBJECTS_ITEMFINDER SQLITE_DELETE_TRIGGER(SQLITE_TABLE_OBJECTS,\
00311 SQLITE_TABLE_ITEMFINDER)
00312
00313
00314
00315
00316
00317
00318
00319 #define SQLITE_CREATE_TABLE_OBJECTS "CREATE TABLE IF NOT EXISTS "\
00320 SQLITE_TABLE_OBJECTS \
00321 "(" \
00322 SQLITE_COL_OBJECTID " " SQLITE_PRIMARY_KEY " " SQLITE_NOT_NULL " " SQLITE_CONFLICT_CLAUSE "," \
00323 SQLITE_COL_PARENTID " " SQLITE_TYPE_INTEGER " " SQLITE_NOT_NULL " " SQLITE_CONFLICT_CLAUSE "," \
00324 SQLITE_COL_TITLE " " SQLITE_TYPE_TEXT " " SQLITE_NOT_NULL "," \
00325 SQLITE_COL_CREATOR " " SQLITE_TYPE_TEXT "," \
00326 SQLITE_COL_CLASS " " SQLITE_TYPE_TEXT " " SQLITE_NOT_NULL "," \
00327 SQLITE_COL_RESTRICTED " " SQLITE_TYPE_BOOL " " SQLITE_NOT_NULL "," \
00328 SQLITE_COL_WRITESTATUS " " SQLITE_TYPE_INTEGER \
00329 ");"
00330
00331
00332
00333 #define SQLITE_TRIGGER_D_OBJECTS_OBJECTS SQLITE_DELETE_PARENT_TRIGGER
00334
00335 #define SQLITE_TRIGGER_I_OBJECTS_OBJECTS SQLITE_INSERT_REFERENCE_TRIGGER(SQLITE_TABLE_OBJECTS, SQLITE_COL_PARENTID)\
00336 "CREATE TRIGGER IF NOT EXISTS "\
00337 SQLITE_TABLE_OBJECTS "_PI_" SQLITE_TABLE_OBJECTS " "\
00338 "BEFORE INSERT ON "\
00339 SQLITE_TABLE_OBJECTS " " \
00340 "FOR EACH ROW BEGIN "\
00341 "SELECT CASE "\
00342 "WHEN ("\
00343 "((SELECT " SQLITE_COL_PARENTID " FROM " SQLITE_TABLE_OBJECTS " "\
00344 "WHERE " SQLITE_COL_PARENTID "=-1) IS NOT NULL) "\
00345 "AND "\
00346 "(NEW." SQLITE_COL_PARENTID "=-1)"\
00347 ") THEN "\
00348 "RAISE(" SQLITE_TRANSACTION_TYPE ","\
00349 "'INSERT on table " SQLITE_TABLE_OBJECTS " violates constraint. "\
00350 SQLITE_COL_PARENTID " must uniquely be -1') "\
00351 "END; END;"
00352
00353 #define SQLITE_TRIGGER_U_OBJECTS_OBJECTS SQLITE_UPDATE_REFERENCE_TRIGGER(SQLITE_TABLE_OBJECTS, SQLITE_COL_PARENTID)\
00354 "CREATE TRIGGER IF NOT EXISTS "\
00355 SQLITE_TABLE_OBJECTS "_PU_" SQLITE_TABLE_OBJECTS " "\
00356 "BEFORE UPDATE ON "\
00357 SQLITE_TABLE_OBJECTS " " \
00358 "FOR EACH ROW BEGIN "\
00359 "SELECT CASE "\
00360 "WHEN ("\
00361 "((SELECT " SQLITE_COL_PARENTID " FROM " SQLITE_TABLE_OBJECTS " "\
00362 "WHERE " SQLITE_COL_PARENTID "=-1 "\
00363 "AND " SQLITE_COL_OBJECTID "!=NEW." SQLITE_COL_OBJECTID " ) IS NOT NULL) "\
00364 "AND "\
00365 "(NEW." SQLITE_COL_PARENTID "=-1) AND (OLD." SQLITE_COL_PARENTID "!=-1) "\
00366 ") THEN "\
00367 "RAISE(" SQLITE_TRANSACTION_TYPE ","\
00368 "'UPDATE on table " SQLITE_TABLE_OBJECTS " violates constraint. "\
00369 SQLITE_COL_PARENTID " must uniquely be -1') "\
00370 "END; END;"
00371
00372
00373
00374
00375
00376
00377
00378 #define SQLITE_CREATE_TABLE_ITEMS "CREATE TABLE IF NOT EXISTS "\
00379 SQLITE_TABLE_ITEMS \
00380 "(" \
00381 SQLITE_UPNP_OBJECTID "," \
00382 SQLITE_COL_REFERENCEID " " SQLITE_TYPE_INTEGER " DEFAULT -1" \
00383 ");"
00384
00385
00386
00387 #define SQLITE_TRIGGER_D_OBJECT_ITEMS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_OBJECTS,\
00388 SQLITE_TABLE_ITEMS)
00389
00390 #define SQLITE_TRIGGER_I_OBJECT_ITEMS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_OBJECTS,\
00391 SQLITE_TABLE_ITEMS,\
00392 UPNP_CLASS_ITEM)
00393
00394 #define SQLITE_TRIGGER_U_OBJECT_ITEMS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_OBJECTS,\
00395 SQLITE_TABLE_ITEMS,\
00396 UPNP_CLASS_ITEM)
00397
00398
00399
00400 #define SQLITE_TRIGGER_I_ITEMS_ITEMS SQLITE_INSERT_REFERENCE_TRIGGER(SQLITE_TABLE_ITEMS, SQLITE_COL_REFERENCEID)
00401
00402 #define SQLITE_TRIGGER_U_ITEMS_ITEMS SQLITE_UPDATE_REFERENCE_TRIGGER(SQLITE_TABLE_ITEMS, SQLITE_COL_REFERENCEID)
00403
00404 #define SQLITE_TRIGGER_D_ITEMS_ITEMS SQLITE_DELETE_REFERENCE_TRIGGER(SQLITE_TABLE_ITEMS, SQLITE_COL_REFERENCEID)
00405
00406
00407
00408
00409
00410
00411
00412 #define SQLITE_CREATE_TABLE_CONTAINER "CREATE TABLE IF NOT EXISTS "\
00413 SQLITE_TABLE_CONTAINERS \
00414 "(" \
00415 SQLITE_UPNP_OBJECTID "," \
00416 SQLITE_COL_SEARCHABLE " " SQLITE_TYPE_INTEGER ","\
00417 SQLITE_COL_CONTAINER_UID " " SQLITE_TYPE_INTEGER " " SQLITE_NOT_NULL ","\
00418 SQLITE_COL_DLNA_CONTAINERTYPE " " SQLITE_TYPE_TEXT \
00419 ");"
00420
00421 #define SQLITE_TRIGGER_D_OBJECT_CONTAINERS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_OBJECTS,\
00422 SQLITE_TABLE_CONTAINERS)
00423
00424 #define SQLITE_TRIGGER_I_OBJECT_CONTAINERS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_OBJECTS,\
00425 SQLITE_TABLE_CONTAINERS,\
00426 UPNP_CLASS_CONTAINER)
00427
00428 #define SQLITE_TRIGGER_U_OBJECT_CONTAINERS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_OBJECTS,\
00429 SQLITE_TABLE_CONTAINERS,\
00430 UPNP_CLASS_CONTAINER)
00431
00432
00433
00434
00435
00436
00437
00438 #define SQLITE_CREATE_TABLE_VIDEOITEMS "CREATE TABLE IF NOT EXISTS "\
00439 SQLITE_TABLE_VIDEOITEMS \
00440 "(" \
00441 SQLITE_UPNP_OBJECTID "," \
00442 SQLITE_COL_GENRE " " SQLITE_TYPE_TEXT "," \
00443 SQLITE_COL_LONGDESCRIPTION " " SQLITE_TYPE_TEXT "," \
00444 SQLITE_COL_PRODUCER " " SQLITE_TYPE_TEXT "," \
00445 SQLITE_COL_RATING " " SQLITE_TYPE_TEXT "," \
00446 SQLITE_COL_ACTOR " " SQLITE_TYPE_TEXT "," \
00447 SQLITE_COL_DIRECTOR " " SQLITE_TYPE_TEXT "," \
00448 SQLITE_COL_DESCRIPTION " " SQLITE_TYPE_TEXT "," \
00449 SQLITE_COL_PUBLISHER " " SQLITE_TYPE_TEXT "," \
00450 SQLITE_COL_LANGUAGE " " SQLITE_TYPE_TEXT "," \
00451 SQLITE_COL_RELATION " " SQLITE_TYPE_TEXT \
00452 ");"
00453
00454 #define SQLITE_TRIGGER_D_ITEMS_VIDEOITEMS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_ITEMS, SQLITE_TABLE_VIDEOITEMS)
00455
00456 #define SQLITE_TRIGGER_U_ITEMS_VIDEOITEMS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_ITEMS, \
00457 SQLITE_TABLE_VIDEOITEMS, \
00458 UPNP_CLASS_VIDEO)
00459
00460 #define SQLITE_TRIGGER_I_ITEMS_VIDEOITEMS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_ITEMS, \
00461 SQLITE_TABLE_VIDEOITEMS, \
00462 UPNP_CLASS_VIDEO)
00463
00464
00465
00466
00467
00468
00469
00470 #define SQLITE_CREATE_TABLE_AUDIOITEMS "CREATE TABLE IF NOT EXISTS "\
00471 SQLITE_TABLE_AUDIOITEMS \
00472 "(" \
00473 SQLITE_UPNP_OBJECTID "," \
00474 SQLITE_COL_GENRE " " SQLITE_TYPE_TEXT "," \
00475 SQLITE_COL_LONGDESCRIPTION " " SQLITE_TYPE_TEXT "," \
00476 SQLITE_COL_DESCRIPTION " " SQLITE_TYPE_TEXT "," \
00477 SQLITE_COL_PUBLISHER " " SQLITE_TYPE_TEXT "," \
00478 SQLITE_COL_RELATION " " SQLITE_TYPE_TEXT \
00479 ");"
00480
00481 #define SQLITE_TRIGGER_D_ITEMS_AUDIOITEMS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_ITEMS, SQLITE_TABLE_AUDIOITEMS)
00482
00483 #define SQLITE_TRIGGER_U_ITEMS_AUDIOITEMS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_ITEMS, \
00484 SQLITE_TABLE_AUDIOITEMS, \
00485 UPNP_CLASS_AUDIO)
00486
00487 #define SQLITE_TRIGGER_I_ITEMS_AUDIOITEMS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_ITEMS, \
00488 SQLITE_TABLE_AUDIOITEMS, \
00489 UPNP_CLASS_AUDIO)
00490
00491
00492
00493
00494
00495
00496
00497 #define SQLITE_CREATE_TABLE_IMAGEITEMS "CREATE TABLE IF NOT EXISTS "\
00498 SQLITE_TABLE_IMAGEITEMS \
00499 "("\
00500 SQLITE_UPNP_OBJECTID "," \
00501 SQLITE_COL_LONGDESCRIPTION " " SQLITE_TYPE_TEXT "," \
00502 SQLITE_COL_DESCRIPTION " " SQLITE_TYPE_TEXT "," \
00503 SQLITE_COL_PUBLISHER " " SQLITE_TYPE_TEXT "," \
00504 SQLITE_COL_STORAGEMEDIUM " " SQLITE_TYPE_TEXT ","\
00505 SQLITE_COL_RATING " " SQLITE_TYPE_TEXT ","\
00506 SQLITE_COL_DATE " " SQLITE_TYPE_TEXT ","\
00507 SQLITE_COL_RIGHTS " " SQLITE_TYPE_TEXT\
00508 ");"
00509
00510 #define SQLITE_TRIGGER_D_ITEMS_IMAGEITEMS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_ITEMS, SQLITE_TABLE_IMAGEITEMS)
00511
00512 #define SQLITE_TRIGGER_U_ITEMS_IMAGEITEMS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_ITEMS, \
00513 SQLITE_TABLE_IMAGEITEMS, \
00514 UPNP_CLASS_IMAGE)
00515
00516 #define SQLITE_TRIGGER_I_ITEMS_IMAGEITEMS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_ITEMS, \
00517 SQLITE_TABLE_IMAGEITEMS, \
00518 UPNP_CLASS_IMAGE)
00519
00520
00521
00522
00523
00524
00525
00526 #define SQLITE_CREATE_TABLE_VIDEOBROADCASTS "CREATE TABLE IF NOT EXISTS "\
00527 SQLITE_TABLE_VIDEOBROADCASTS \
00528 "("\
00529 SQLITE_UPNP_OBJECTID "," \
00530 SQLITE_COL_ICON " " SQLITE_TYPE_TEXT ","\
00531 SQLITE_COL_REGION " " SQLITE_TYPE_TEXT ","\
00532 SQLITE_COL_CHANNELNR " " SQLITE_TYPE_TEXT ","\
00533 SQLITE_COL_CHANNELNAME " " SQLITE_TYPE_TEXT " " SQLITE_UNIQUE \
00534 ");"
00535
00536 #define SQLITE_TRIGGER_D_VIDEOITEMS_VIDEOBROADCASTS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_VIDEOITEMS, SQLITE_TABLE_VIDEOBROADCASTS)
00537
00538 #define SQLITE_TRIGGER_U_VIDEOITEMS_VIDEOBROADCASTS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_VIDEOITEMS,\
00539 SQLITE_TABLE_VIDEOBROADCASTS,\
00540 UPNP_CLASS_VIDEOBC)
00541
00542 #define SQLITE_TRIGGER_I_VIDEOITEMS_VIDEOBROADCASTS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_VIDEOITEMS,\
00543 SQLITE_TABLE_VIDEOBROADCASTS,\
00544 UPNP_CLASS_VIDEOBC)
00545
00546
00547
00548
00549
00550
00551
00552 #define SQLITE_CREATE_TABLE_AUDIOBROADCASTS "CREATE TABLE IF NOT EXISTS "\
00553 SQLITE_TABLE_AUDIOBROADCASTS \
00554 "("\
00555 SQLITE_UPNP_OBJECTID "," \
00556 SQLITE_COL_REGION " " SQLITE_TYPE_TEXT ","\
00557 SQLITE_COL_RADIOCALLSIGN " " SQLITE_TYPE_TEXT ","\
00558 SQLITE_COL_RADIOSTATIONID " " SQLITE_TYPE_TEXT ","\
00559 SQLITE_COL_RADIOBAND " " SQLITE_TYPE_TEXT ","\
00560 SQLITE_COL_CHANNELNR " " SQLITE_TYPE_INTEGER \
00561 ");"
00562
00563 #define SQLITE_TRIGGER_D_AUDIOITEMS_AUDIOBROADCASTS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_AUDIOITEMS, SQLITE_TABLE_AUDIOBROADCASTS)
00564
00565 #define SQLITE_TRIGGER_I_AUDIOITEMS_AUDIOBROADCASTS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_AUDIOITEMS,\
00566 SQLITE_TABLE_AUDIOBROADCASTS,\
00567 UPNP_CLASS_AUDIOBC)
00568
00569 #define SQLITE_TRIGGER_U_AUDIOITEMS_AUDIOBROADCASTS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_AUDIOITEMS,\
00570 SQLITE_TABLE_AUDIOBROADCASTS,\
00571 UPNP_CLASS_AUDIOBC)
00572
00573
00574
00575
00576
00577
00578
00579 #define SQLITE_CREATE_TABLE_MOVIES "CREATE TABLE IF NOT EXISTS "\
00580 SQLITE_TABLE_MOVIES \
00581 "("\
00582 SQLITE_UPNP_OBJECTID "," \
00583 SQLITE_COL_STORAGEMEDIUM " " SQLITE_TYPE_TEXT "," \
00584 SQLITE_COL_DVDREGIONCODE " " SQLITE_TYPE_INTEGER "," \
00585 SQLITE_COL_CHANNELNAME " " SQLITE_TYPE_TEXT ","\
00586 SQLITE_COL_SCHEDULEDSTARTTIME " " SQLITE_TYPE_TEXT ","\
00587 SQLITE_COL_SCHEDULEDENDTIME " " SQLITE_TYPE_TEXT\
00588 ");"
00589
00590 #define SQLITE_TRIGGER_D_VIDEOITEMS_MOVIES SQLITE_DELETE_TRIGGER(SQLITE_TABLE_VIDEOITEMS, SQLITE_TABLE_MOVIES)
00591
00592
00593 #define SQLITE_TRIGGER_I_VIDEOITEMS_MOVIES SQLITE_INSERT_TRIGGER(SQLITE_TABLE_VIDEOITEMS,\
00594 SQLITE_TABLE_MOVIES,\
00595 UPNP_CLASS_MOVIE)
00596
00597 #define SQLITE_TRIGGER_U_VIDEOITEMS_MOVIES SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_VIDEOITEMS,\
00598 SQLITE_TABLE_MOVIES,\
00599 UPNP_CLASS_MOVIE)
00600
00601
00602
00603
00604
00605
00606
00607 #define SQLITE_CREATE_TABLE_PHOTOS "CREATE TABLE IF NOT EXISTS "\
00608 SQLITE_TABLE_PHOTOS \
00609 "("\
00610 SQLITE_UPNP_OBJECTID "," \
00611 SQLITE_COL_ALBUM " " SQLITE_TYPE_TEXT\
00612 ");"
00613
00614 #define SQLITE_TRIGGER_D_IMAGEITEMS_PHOTOS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_IMAGEITEMS, SQLITE_TABLE_PHOTOS)
00615
00616 #define SQLITE_TRIGGER_I_IMAGEITEMS_PHOTOS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_IMAGEITEMS,\
00617 SQLITE_TABLE_PHOTOS,\
00618 UPNP_CLASS_PHOTO)
00619
00620 #define SQLITE_TRIGGER_U_IMAGEITEMS_PHOTOS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_IMAGEITEMS,\
00621 SQLITE_TABLE_PHOTOS,\
00622 UPNP_CLASS_PHOTO)
00623
00624
00625
00626
00627
00628
00629
00630 #define SQLITE_CREATE_TABLE_ALBUMS "CREATE TABLE IF NOT EXISTS "\
00631 SQLITE_TABLE_ALBUMS \
00632 "("\
00633 SQLITE_UPNP_OBJECTID "," \
00634 SQLITE_COL_STORAGEMEDIUM " " SQLITE_TYPE_TEXT "," \
00635 SQLITE_COL_LONGDESCRIPTION " " SQLITE_TYPE_TEXT "," \
00636 SQLITE_COL_DESCRIPTION " " SQLITE_TYPE_TEXT "," \
00637 SQLITE_COL_PUBLISHER " " SQLITE_TYPE_TEXT "," \
00638 SQLITE_COL_CONTRIBUTOR " " SQLITE_TYPE_TEXT ","\
00639 SQLITE_COL_DATE " " SQLITE_TYPE_TEXT "," \
00640 SQLITE_COL_RELATION " " SQLITE_TYPE_TEXT "," \
00641 SQLITE_COL_RIGHTS " " SQLITE_TYPE_TEXT \
00642 ");"
00643
00644 #define SQLITE_TRIGGER_D_CONTAINERS_ALBUMS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_CONTAINERS, SQLITE_TABLE_ALBUMS)
00645
00646 #define SQLITE_TRIGGER_U_CONTAINERS_ALBUMS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_CONTAINERS,\
00647 SQLITE_TABLE_ALBUMS,\
00648 UPNP_CLASS_ALBUM)
00649
00650 #define SQLITE_TRIGGER_I_CONTAINERS_ALBUMS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_CONTAINERS,\
00651 SQLITE_TABLE_ALBUMS,\
00652 UPNP_CLASS_ALBUM)
00653
00654
00655
00656
00657
00658
00659
00660 #define SQLITE_CREATE_TABLE_PLAYLISTS "CREATE TABLE IF NOT EXISTS "\
00661 SQLITE_TABLE_PLAYLISTS \
00662 "(" \
00663 SQLITE_UPNP_OBJECTID "," \
00664 SQLITE_COL_ARTIST " " SQLITE_TYPE_TEXT "," \
00665 SQLITE_COL_GENRE " " SQLITE_TYPE_TEXT "," \
00666 SQLITE_COL_LONGDESCRIPTION " " SQLITE_TYPE_TEXT "," \
00667 SQLITE_COL_DESCRIPTION " " SQLITE_TYPE_TEXT ","\
00668 SQLITE_COL_PRODUCER " " SQLITE_TYPE_TEXT "," \
00669 SQLITE_COL_STORAGEMEDIUM " " SQLITE_TYPE_TEXT "," \
00670 SQLITE_COL_CONTRIBUTOR " " SQLITE_TYPE_TEXT "," \
00671 SQLITE_COL_DATE " " SQLITE_TYPE_TEXT ","\
00672 SQLITE_COL_LANGUAGE " " SQLITE_TYPE_TEXT ","\
00673 SQLITE_COL_RIGHTS " " SQLITE_TYPE_TEXT\
00674 ");"
00675
00676 #define SQLITE_TRIGGER_D_CONTAINERS_PLAYLISTS SQLITE_DELETE_TRIGGER(SQLITE_TABLE_CONTAINERS, SQLITE_TABLE_PLAYLISTS)
00677
00678 #define SQLITE_TRIGGER_I_CONTAINERS_PLAYLISTS SQLITE_INSERT_TRIGGER(SQLITE_TABLE_CONTAINERS,\
00679 SQLITE_TABLE_PLAYLISTS,\
00680 UPNP_CLASS_PLAYLISTCONT)
00681
00682 #define SQLITE_TRIGGER_U_CONTAINERS_PLAYLISTS SQLITE_UPDATE_TRIGGER(SQLITE_TABLE_CONTAINERS,\
00683 SQLITE_TABLE_PLAYLISTS,\
00684 UPNP_CLASS_PLAYLISTCONT)
00685
00686
00687
00688
00689
00690
00691
00692 #define SQLITE_CREATE_TABLE_SEARCHCLASS "CREATE TABLE IF NOT EXISTS "\
00693 SQLITE_TABLE_SEARCHCLASS \
00694 "(" \
00695 SQLITE_COL_OBJECTID " " SQLITE_TYPE_INTEGER " " SQLITE_NOT_NULL "," \
00696 SQLITE_COL_CLASS " " SQLITE_TYPE_TEXT "," \
00697 SQLITE_COL_CLASSDERIVED " " SQLITE_TYPE_BOOL \
00698 ");"
00699
00700 #define SQLITE_TRIGGER_D_CONTAINERS_SEARCHCLASSES "CREATE TRIGGER IF NOT EXISTS " \
00701 SQLITE_TABLE_CONTAINERS "_D_" SQLITE_TABLE_SEARCHCLASS " " \
00702 "BEFORE DELETE ON " \
00703 SQLITE_TABLE_CONTAINERS " " \
00704 "FOR EACH ROW BEGIN "\
00705 "DELETE FROM " SQLITE_TABLE_SEARCHCLASS " "\
00706 "WHERE " SQLITE_COL_OBJECTID "= OLD." SQLITE_COL_OBJECTID "; " \
00707 "END;"
00708
00709 #define SQLITE_TRIGGER_U_CONTAINERS_SEARCHCLASSES "CREATE TRIGGER IF NOT EXISTS " \
00710 SQLITE_TABLE_CONTAINERS "_U_" SQLITE_TABLE_SEARCHCLASS " " \
00711 "BEFORE UPDATE ON " \
00712 SQLITE_TABLE_SEARCHCLASS " " \
00713 "FOR EACH ROW BEGIN "\
00714 "SELECT CASE "\
00715 "WHEN ("\
00716 "(SELECT " SQLITE_COL_OBJECTID " FROM " SQLITE_TABLE_CONTAINERS " "\
00717 "WHERE " SQLITE_COL_OBJECTID "=NEW." SQLITE_COL_OBJECTID ") IS NULL "\
00718 ") THEN "\
00719 "RAISE (" SQLITE_TRANSACTION_TYPE ", 'UPDATE on table " SQLITE_TABLE_SEARCHCLASS " "\
00720 "violates foreign key constraint \"" SQLITE_COL_OBJECTID "\"') " \
00721 "END; END;"
00722
00723 #define SQLITE_TRIGGER_I_CONTAINERS_SEARCHCLASSES "CREATE TRIGGER IF NOT EXISTS " \
00724 SQLITE_TABLE_CONTAINERS "_I_" SQLITE_TABLE_SEARCHCLASS " " \
00725 "BEFORE INSERT ON " \
00726 SQLITE_TABLE_SEARCHCLASS " " \
00727 "FOR EACH ROW BEGIN "\
00728 "SELECT CASE "\
00729 "WHEN ("\
00730 "(SELECT " SQLITE_COL_OBJECTID " FROM " SQLITE_TABLE_CONTAINERS " "\
00731 "WHERE " SQLITE_COL_OBJECTID "=NEW." SQLITE_COL_OBJECTID ") IS NULL "\
00732 ") THEN "\
00733 "RAISE (" SQLITE_TRANSACTION_TYPE ", 'INSERT on table " SQLITE_TABLE_SEARCHCLASS " "\
00734 "violates foreign key constraint \"" SQLITE_COL_OBJECTID "\"') " \
00735 "END; END;"
00736
00737
00738
00739
00740
00741
00742
00743 #define SQLITE_CREATE_TABLE_RESOURCES "CREATE TABLE IF NOT EXISTS "\
00744 SQLITE_TABLE_RESOURCES \
00745 "(" \
00746 SQLITE_COL_RESOURCEID " " SQLITE_PRIMARY_KEY " " SQLITE_NOT_NULL "," \
00747 SQLITE_COL_OBJECTID " " SQLITE_TYPE_INTEGER " " SQLITE_NOT_NULL "," \
00748 SQLITE_COL_PROTOCOLINFO " " SQLITE_TYPE_TEXT " " SQLITE_NOT_NULL "," \
00749 SQLITE_COL_CONTENTTYPE " " SQLITE_TYPE_TEXT " " SQLITE_NOT_NULL "," \
00750 SQLITE_COL_RESOURCETYPE " " SQLITE_TYPE_INTEGER " " SQLITE_NOT_NULL "," \
00751 SQLITE_COL_RESOURCE " " SQLITE_TYPE_TEXT " " SQLITE_NOT_NULL "," \
00752 SQLITE_COL_SIZE " " SQLITE_TYPE_ULONG "," \
00753 SQLITE_COL_DURATION " " SQLITE_TYPE_TEXT "," \
00754 SQLITE_COL_BITRATE " " SQLITE_TYPE_UINTEGER "," \
00755 SQLITE_COL_SAMPLEFREQUENCE " " SQLITE_TYPE_UINTEGER "," \
00756 SQLITE_COL_BITSPERSAMPLE " " SQLITE_TYPE_UINTEGER "," \
00757 SQLITE_COL_NOAUDIOCHANNELS " " SQLITE_TYPE_UINTEGER "," \
00758 SQLITE_COL_COLORDEPTH " " SQLITE_TYPE_UINTEGER "," \
00759 SQLITE_COL_RESOLUTION " " SQLITE_TYPE_TEXT \
00760 ");"
00761
00762 #define SQLITE_TRIGGER_D_OBJECT_RESOURCES "CREATE TRIGGER IF NOT EXISTS " \
00763 SQLITE_TABLE_OBJECTS "_D_" SQLITE_TABLE_RESOURCES " " \
00764 "BEFORE DELETE ON " \
00765 SQLITE_TABLE_OBJECTS " " \
00766 "FOR EACH ROW BEGIN "\
00767 "DELETE FROM " SQLITE_TABLE_RESOURCES " "\
00768 "WHERE " SQLITE_COL_OBJECTID "= OLD." SQLITE_COL_OBJECTID "; " \
00769 "END;"
00770
00771 #define SQLITE_TRIGGER_I_OBJECT_RESOURCES "CREATE TRIGGER IF NOT EXISTS " \
00772 SQLITE_TABLE_OBJECTS "_I_" SQLITE_TABLE_RESOURCES " " \
00773 "BEFORE INSERT ON " \
00774 SQLITE_TABLE_RESOURCES " " \
00775 "FOR EACH ROW BEGIN "\
00776 "SELECT CASE "\
00777 "WHEN ("\
00778 "(SELECT " SQLITE_COL_OBJECTID " FROM " SQLITE_TABLE_OBJECTS " "\
00779 "WHERE " SQLITE_COL_OBJECTID "=NEW." SQLITE_COL_OBJECTID ") IS NULL"\
00780 ") THEN "\
00781 "RAISE (" SQLITE_TRANSACTION_TYPE ", 'INSERT on table " SQLITE_TABLE_RESOURCES " "\
00782 "violates foreign key constraint \"" SQLITE_COL_OBJECTID "\"') " \
00783 "END; END;"
00784
00785 #define SQLITE_TRIGGER_U_OBJECT_RESOURCES "CREATE TRIGGER IF NOT EXISTS " \
00786 SQLITE_TABLE_OBJECTS "_U_" SQLITE_TABLE_RESOURCES " " \
00787 "BEFORE UPDATE ON " \
00788 SQLITE_TABLE_RESOURCES " " \
00789 "FOR EACH ROW BEGIN "\
00790 "SELECT CASE "\
00791 "WHEN ("\
00792 "(SELECT " SQLITE_COL_OBJECTID " FROM " SQLITE_TABLE_OBJECTS " "\
00793 "WHERE " SQLITE_COL_OBJECTID "=NEW." SQLITE_COL_OBJECTID ") IS NULL"\
00794 ") THEN "\
00795 "RAISE (" SQLITE_TRANSACTION_TYPE ", 'INSERT on table " SQLITE_TABLE_RESOURCES " "\
00796 "violates foreign key constraint \"" SQLITE_COL_OBJECTID "\"') " \
00797 "END; END;"
00798
00799 class cSQLiteDatabase;
00800
00808 class cRow : public cListObject {
00809 friend class cSQLiteDatabase;
00810 private:
00811 int currentCol;
00812 int ColCount;
00813 char** Columns;
00814 char** Values;
00815 cRow();
00816 public:
00817 virtual ~cRow();
00823 int Count(){ return this->ColCount; }
00834 bool fetchColumn(
00835 cString* Column,
00836 cString* Value
00837 );
00838
00849 bool fetchColumn(
00850 char** Column,
00851 char** Value
00852 );
00853 };
00854
00862 class cRows : public cList<cRow> {
00863 friend class cSQLiteDatabase;
00864 private:
00865 cRow* mLastRow;
00866 cRows();
00867 public:
00868 virtual ~cRows();
00879 bool fetchRow(
00880 cRow** Row
00881 );
00882 };
00883
00892 class cSQLiteDatabase {
00893 friend class cStatement;
00894 private:
00895 bool mAutoCommit;
00896 bool mActiveTransaction;
00897 cRow* mLastRow;
00898 cRows* mRows;
00899 sqlite3* mDatabase;
00900 static cSQLiteDatabase* mInstance;
00901 cSQLiteDatabase();
00902 int initialize();
00903 int initializeTables();
00904 int initializeTriggers();
00905 static int getResultRow(void* DB, int NumCols, char** Values, char** ColNames);
00906 int exec(const char* Statement);
00907 public:
00923 static const char* sprintf(
00924 const char* Format,
00925 ...
00926 );
00927 virtual ~cSQLiteDatabase();
00937 static cSQLiteDatabase* getInstance();
00946 int getResultCount() const { return this->mRows->Count(); }
00955 long getLastInsertRowID() const;
00965 cRows* getResultRows() const { return this->mRows; }
00979 int execStatement(
00980 const char* Statement ,
00981 ...
00982 );
00991 void startTransaction();
01000 void commitTransaction();
01009 void rollbackTransaction();
01021 void setAutoCommit(
01022 bool Commit=true
01023 ){ this->mAutoCommit = Commit; }
01024 };
01025
01026 #endif