module StateSizedIO.LIB.DB.Interface where

open import Data.String.Base  hiding (show)
open import Data.List renaming (_++_ to _++List_)
open import Data.List.Categorical
open import Data.Nat
open import Data.Nat.Show
open import Data.Fin

open import StateSizedIO.LIB.HDBC.HDBC
open import StateSizedIO.LIB.DB.Schema

open import StateSizedIO.LIB.DB.Serialization


open import StateSizedIO.LIB.library

open import NativeIO renaming (NativeIO to IO; nativeReturn to return; _native>>=_ to _>>=_)


insertRows : Connection 
             (schema : Schema) 
             (table : Fin (nrTables schema)) 
             List (Row (tableFields schema table)) 
             IO Unit

insertRows conn schema table xs =
  nativePrepare conn (insertCommand schema table) >>= λ statement 

  mapM ioMonad  x  nativeExecute statement (row2SqlVal x)) xs >>= λ x 
  nativeCommit conn >>= λ _ 
  return _