;
; ------------------------------------------------------------
;
;   SpiderBasic - Persistent database example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;
; NOTE: when running in browser, if the user clear its cache it will be gone.
; When creating a mobile application, the data will be persistent.
;

Procedure CreateFileCallback(Status, Filename$, File, SizeRead)
  Select Status
    Case #PB_Status_Saved
      Debug "Database file saved: " + Filename$
      Debug "Please relaunch the program to test the persitency."
     
    Case #PB_Status_Error
      Debug "Can't save the database: " + Filename$
  EndSelect
EndProcedure


Procedure ReadFileCallback(Status, Filename$, File, SizeRead)
  Select Status
    Case #PB_Status_Loaded
      Debug "Database file found and loaded: " + Filename$
     
      ; Get all the file as a memory buffer
      ;
      *DatabaseBuffer = ExportFileMemory(File)
     
      If OpenDatabase(0, *DatabaseBuffer)
        Debug "OpenDatabase() created with previous database data. Performing a query..."
        
        If DatabaseQuery(0, "SELECT * FROM superheroes WHERE weight > 72")
          While NextDatabaseRow(0)
            Debug "superhero: " + GetDatabaseString(0, 0) + " " + GetDatabaseString(0, 1) + " (weight: " + GetDatabaseDouble(0, 2) + " kg)"
          Wend
         
          FinishDatabaseQuery(0)
        Else
          Debug "DatabaseQuery() failed: " + DatabaseError()
        EndIf
      Else
        Debug "OpenDatabase() failed"
      EndIf
      
     
    Case #PB_Status_Error
      Debug "Database not found in localstorage: " + Filename$
      Debug "Creating a new database..."
     
      If OpenDatabase(0)
  
        DatabaseUpdate(0, "CREATE TABLE superheroes (firstname TEXT, name TEXT, weight REAL)")
       
        DatabaseUpdate(0, "INSERT INTO superheroes (firstname, name, weight) Values ('Peter', 'Parker', '80.8')")
        DatabaseUpdate(0, "INSERT INTO superheroes (firstname, name, weight) Values ('Bruce', 'Wayne', '70.5')")
        DatabaseUpdate(0, "INSERT INTO superheroes (firstname, name, weight) Values ('Clark', 'Kent', '75.1')")
  
        ; Now save the database to a persistent file
        ;
        *DatabaseBuffer = ExportDatabaseMemory(DB)
        If CreateFile(0, "testdb.sqlite", @CreateFileCallback(), #PB_LocalStorage)
          WriteData(0, *DatabaseBuffer, 0, MemorySize(*DatabaseBuffer))
          CloseFile(0)
        EndIf
        
        CloseDatabase(0)
      Else
        Debug "OpenDatabase() failed"
      EndIf
  EndSelect
EndProcedure

; Try to read the database if already present, or it will create a new one
;
ReadFile(0, "testdb.sqlite", @ReadFileCallback(), #PB_LocalStorage)