diff options
Diffstat (limited to 'ext/pdo_sqlite/sqlite_statement.c')
-rw-r--r-- | ext/pdo_sqlite/sqlite_statement.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c index 38d091c9d7..1c2c02ca30 100644 --- a/ext/pdo_sqlite/sqlite_statement.c +++ b/ext/pdo_sqlite/sqlite_statement.c @@ -176,15 +176,16 @@ static int pdo_sqlite_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) stmt->columns[colno].namelen = strlen(stmt->columns[colno].name); stmt->columns[colno].maxlen = 0xffffffff; stmt->columns[colno].precision = 0; - + switch (sqlite3_column_type(S->stmt, colno)) { case SQLITE_INTEGER: case SQLITE_FLOAT: - case SQLITE_TEXT: + case SQLITE3_TEXT: case SQLITE_BLOB: stmt->columns[colno].param_type = PDO_PARAM_STR; break; case SQLITE_NULL: + default: stmt->columns[colno].param_type = PDO_PARAM_NULL; break; } @@ -214,10 +215,20 @@ static int pdo_sqlite_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsi *ptr = (char*)sqlite3_column_blob(S->stmt, colno); *len = sqlite3_column_bytes(S->stmt, colno); return 1; + + case SQLITE3_TEXT: + *ptr = (char*)sqlite3_column_text(S->stmt, colno); + *len = sqlite3_column_bytes(S->stmt, colno); + if (*len) { + /* sqlite3.h says "the NUL terminator is included in the byte count + * for TEXT values" */ + *len--; + } + return 1; default: *ptr = (char*)sqlite3_column_text(S->stmt, colno); - *len = strlen(*ptr); + *len = sqlite3_column_bytes(S->stmt, colno); return 1; } } |