Skip to content

Instantly share code, notes, and snippets.

@ben-albrecht
Created July 24, 2017 17:28
Show Gist options
  • Save ben-albrecht/0ec6b7f5279501943715e2ea0c6de994 to your computer and use it in GitHub Desktop.
Save ben-albrecht/0ec6b7f5279501943715e2ea0c6de994 to your computer and use it in GitHub Desktop.
/*
Compiled with:
chpl sql-example.chpl -L$(brew --prefix sqlite)/lib -lsqlite3 -I$(brew --prefix sqlite)/include -o sql-example
*/
use SQLite3;
// TODO: Write this in Chapel
require "callback.h";
/*
Contents of callback.h :
int callback(void *NotUsed, int argc, char **argv, char **azColName) {
int i;
for(i = 0; i<argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
*/
extern proc callback(NotUsed: c_void_ptr, argc: c_int, argv: c_ptr(c_string), ref azColName: c_string): c_int;
proc main() {
var db: c_ptr(sqlite3);
var zErrMsg: c_string;
var rc: c_int = sqlite3_open("test.db".c_str(), db);
writeln(rc:int);
if rc {
stderr.write("Can't open database: %s\n", sqlite3_errmsg(db):string);
sqlite3_close(db);
halt();
} else {
writeln("Opened database successfully");
}
var sql = "CREATE TABLE COMPANY(" +
"ID INT PRIMARY KEY NOT NULL," +
"NAME TEXT NOT NULL," +
"AGE INT NOT NULL," +
"ADDRESS CHAR(50)," +
"SALARY REAL );";
var voidPtr: c_void_ptr;
rc = sqlite3_exec(db, sql.c_str(), c_ptrTo(callback), voidPtr, c_ptrTo(zErrMsg));
if rc != 0 {
stderr.write("SQL error: %s", zErrMsg:string);
} else {
writeln("Records created successfully");
}
sqlite3_close(db);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment