| 6955 | } |
| 6956 | |
| 6957 | static int sqlite_to_lua(Lua L, const char *tz, int argc, sqlite3_value **argv) |
| 6958 | { |
| 6959 | blob_t b; |
| 6960 | datetime_t d; |
| 6961 | const dttz_t *dt; |
| 6962 | const intv_t *tv; |
| 6963 | |
| 6964 | for (int i = 0; i < argc; ++i) { |
| 6965 | switch (sqlite3_value_type(argv[i])) { |
| 6966 | case SQLITE_INTEGER: |
| 6967 | luabb_pushinteger(L, sqlite3_value_int64(argv[i])); |
| 6968 | break; |
| 6969 | case SQLITE_FLOAT: |
| 6970 | luabb_pushreal(L, sqlite3_value_double(argv[i])); |
| 6971 | break; |
| 6972 | case SQLITE_BLOB: |
| 6973 | b.data = (void *)sqlite3_value_blob(argv[i]); |
| 6974 | b.length = sqlite3_value_bytes(argv[i]); |
| 6975 | luabb_pushblob(L, &b); |
| 6976 | break; |
| 6977 | case SQLITE_NULL: lua_pushnil(L); break; |
| 6978 | case SQLITE_TEXT: |
| 6979 | luabb_pushcstring(L, (char *)sqlite3_value_text(argv[i])); |
| 6980 | break; |
| 6981 | case SQLITE_DATETIME: |
| 6982 | case SQLITE_DATETIMEUS: |
| 6983 | dt = sqlite3_value_datetime(argv[i]); |
| 6984 | dttz_to_datetime_t(dt, tz, &d); |
| 6985 | luabb_pushdatetime(L, &d); |
| 6986 | break; |
| 6987 | case SQLITE_INTERVAL_YM: |
| 6988 | tv = sqlite3_value_interval(argv[i], SQLITE_INTERVAL_YM); |
| 6989 | luabb_pushintervalym(L, tv); |
| 6990 | break; |
| 6991 | case SQLITE_INTERVAL_DS: |
| 6992 | case SQLITE_INTERVAL_DSUS: |
| 6993 | tv = sqlite3_value_interval(argv[i], SQLITE_INTERVAL_DS); |
| 6994 | luabb_pushintervalds(L, tv); |
| 6995 | break; |
| 6996 | case SQLITE_DECIMAL: |
| 6997 | tv = sqlite3_value_interval(argv[i], SQLITE_DECIMAL); |
| 6998 | luabb_pushdecimal(L, &tv->u.dec); |
| 6999 | break; |
| 7000 | default: return -1; |
| 7001 | } |
| 7002 | } |
| 7003 | |
| 7004 | return 0; |
| 7005 | } |
| 7006 | |
| 7007 | static int emit_sqlite_result(struct sqlclntstate *clnt, sqlite3_context *context) |
| 7008 | { |
no test coverage detected