Pastey Euphoria MVC SQLite3 Example
- Posted by ghaberek (admin) Jan 12, 2022
 
include std/filesys.e include std/pretty.e include db/sqlite3.e constant TRUE=1, FALSE=0 sequence PRETTY_INLINE = PRETTY_DEFAULT PRETTY_INLINE[DISPLAY_ASCII] = 3 PRETTY_INLINE[LINE_BREAKS] = FALSE -- pretty print a value on a single line procedure pretty_inline( integer fn, object data ) pretty_print( fn, data, PRETTY_INLINE ) puts( fn, "\n" ) end procedure procedure main() atom rc, db, stmt sequence sql, data, cols -- delete the database file if it exists if file_exists( "test.db" ) then delete_file( "test.db" ) end if -- open the database file (this will create it) {rc,db} = sqlite3_open( "test.db" ) -- check for errors if rc != SQLITE_OK then -- use sqlite3_errstr() here since -- we don't have a database handle. printf( 2, "SQLite3 Error: %s\n", {sqlite3_errstr(rc)} ) end if -- use backtick or triple-quote -- string to span multiple lines sql = `CREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL, password TEXT NOT NULL, email TEXT NOT NULL, enabled INTEGER NOT NULL );` -- execute the command rc = sqlite3_exec( db, sql ) -- check teh result if rc != SQLITE_OK then -- use sqlite3_errmsg() to get the -- error from the database handle. printf( 2, "CREATE error: %s\n", {sqlite3_errmsg(db)} ) return end if -- build a parameterized insert query sql = `INSERT INTO users ( id, username, password, email, enabled ) VALUES( ?1, -- id ?2, -- username ?3, -- password ?4, -- email ?5 -- enabled );` -- build a list of data to insert data = { { 1, "alice", "88ba2bd3a810cd41f57e0f8d1774d2c7", "alice@example.com", TRUE }, { 2, "bob", "a914dff4d3a2fe744bbe6b693c1255b8", "bob@example.com", TRUE }, { 3, "carol", "aec9ab0b98650be2624b01e2e26d7f14", "carol@example.com", FALSE }, { 4, "dave", "da417cadb3f7383922024686d88fa6a3", "dave@example.com", FALSE }, { 5, "eve", "31bec0ebc9aaf2c6d91bb36dfe592e4c", "eve@example.com", FALSE } } -- loop through the data for i = 1 to length( data ) do -- insert each row using a separate statement rc = sqlite3_exec_stmt( db, sql, data[i] ) -- insert, etc. should return SQLITE_DONE not SQLITE_OK if rc != SQLITE_DONE then printf( 2, "INSERT error: %s\n", {sqlite3_errmsg(db)} ) return end if end for -- build a parameterized select query sql = `SELECT * FROM users WHERE username = ?1 OR enabled = ?2; ` -- prepare the statement {rc,stmt} = sqlite3_prepare_v2( db, sql ) if rc != SQLITE_OK then printf( 2, "SELECT error: %s\n", {sqlite3_errmsg(db)} ) return end if -- assign the parameters sqlite3_assign_params( stmt, {"carol",TRUE} ) -- ?1, ?2 cols = {} -- collect the resulting column names for i = 1 to sqlite3_column_count( stmt ) do cols = append( cols, sqlite3_column_name(stmt,i-1) ) end for -- print the column names pretty_inline( 1, cols ) -- loop through all the results while TRUE do -- fetch the next result rc = sqlite3_step( stmt ) -- did we get a row back? if rc != SQLITE_ROW then exit end if -- fetch the current row data data = sqlite3_fetch_row( stmt ) -- print the row data pretty_inline( 1, data ) end while -- close the database sqlite3_close( db ) end procedure main()
		

