return sqlite3_last_insert_rowid (dbh);
}
+void MLSqlite3::postError (ustring msg) {
+ if (errfunc ()) {
+ MNodePtr ag;
+ MNodePtr v;
+ ag = new MNode;
+ ag ()->set_car (newMNode_str (new ustring (msg)));
+ v = execDefun (mlenv, errfunc (), ag (), uEmpty);
+ } else {
+ throw (msg);
+ }
+}
+
/*DOC:
===$sqlite3===
($sqlite3 DB [:limit NUM] [#create | :create BOOL] [SUBFUNCTION...])
static paramList kwlist[] = {
{CharConst ("limit"), false},
{CharConst ("create"), true},
+ {CharConst ("onerror"), false},
{NULL, 0, 0}
};
obj.limit = kARRAYMAX;
}
obj.fcreate = eval_bool (keywords[1], mlenv);
-
+ if (keywords[2])
+ obj.errfunc = eval (keywords[2], mlenv);
+
if (db.size () == 0)
throw (uErrorFilenameEmpty);
dbfile = mlenv->env->path_db (db, kEXT_SQLITE3);
par.bindValue.push_back (NULL);
}
} else {
- throw (ustring ("\"") + *u () + ustring ("\": bad bind name."));
+// throw (ustring ("\"") + *u () + ustring ("\": bad bind name."));
+ obj->postError (ustring ("\"") + *u () + ustring ("\": bad bind name."));
}
}
} else {
}
}
} else { // ! SQLITE_OK
- throw (ustring ("SQL error: ") + sqlite3_errmsg (obj->dbh));
+ obj->postError (ustring (CharConst ("SQL error: ")) + sqlite3_errmsg (obj->dbh));
}
return ans.release ();
sqlite3_stmt* dbst;
int ncols;
bool fcreate;
+ MNodePtr errfunc;
MLSqlite3 (MlEnv* _mlenv): MLFunc (cMLSqlite3ID, _mlenv) {
dbh = NULL;
virtual MNode* answer_list ();
virtual MNode* answer_list_ary ();
virtual sqlite3_int64 rowid ();
+ virtual void postError (ustring msg);
};
MNode* ml_sqlite3 (MNode* cell, MlEnv* mlenv);