| 819 | } |
| 820 | |
| 821 | bool db_sqlite::exec_sql(const char* sql, db_rows* result /* = NULL */) |
| 822 | { |
| 823 | // ���뽫�ϴεIJ�ѯ���ɾ�� |
| 824 | free_result(); |
| 825 | |
| 826 | if (sql == NULL || *sql == 0) { |
| 827 | logger_error("invalid params"); |
| 828 | return false; |
| 829 | } else if (db_ == NULL) { |
| 830 | logger_error("db not open yet!"); |
| 831 | return false; |
| 832 | } |
| 833 | |
| 834 | char** results = NULL, *err; |
| 835 | int nrow, ncolumn; |
| 836 | |
| 837 | // ִ�� sqlite �IJ�ѯ���� |
| 838 | int ret = __sqlite3_get_table(db_, sql, &results, &nrow, &ncolumn, &err); |
| 839 | if (ret != SQLITE_OK) { |
| 840 | logger_error("sqlites_get_table(%s) error(%s)", |
| 841 | sql, __sqlite3_errmsg(db_)); |
| 842 | __sqlite3_free_table(results); |
| 843 | return false; |
| 844 | } |
| 845 | |
| 846 | if (nrow > 0) { |
| 847 | if (result != NULL) { |
| 848 | sqlite_rows_save(results, nrow, ncolumn, *result); |
| 849 | } else { |
| 850 | result_ = NEW db_rows(); |
| 851 | sqlite_rows_save(results, nrow, ncolumn, *result_); |
| 852 | } |
| 853 | } else if (results) { |
| 854 | result_ = NULL; |
| 855 | __sqlite3_free_table(results); |
| 856 | } |
| 857 | |
| 858 | return true; |
| 859 | } |
| 860 | |
| 861 | int db_sqlite::affect_count(void) const |
| 862 | { |
nothing calls this directly
no test coverage detected