example of how to prepare now

This commit is contained in:
dignifiedquire
2019-07-06 13:36:06 +02:00
parent 078c8859f4
commit 813aae08a3
2 changed files with 22 additions and 28 deletions

View File

@@ -671,17 +671,22 @@ pub unsafe fn dc_get_version_str() -> *mut libc::c_char {
pub fn dc_get_fresh_msgs(context: &Context) -> *mut dc_array_t { pub fn dc_get_fresh_msgs(context: &Context) -> *mut dc_array_t {
let show_deaddrop = 0; let show_deaddrop = 0;
let ret = unsafe { dc_array_new(128 as size_t) }; let ret = unsafe { dc_array_new(128 as size_t) };
if !ret.is_null() { if ret.is_null() {
if let Some(ref mut stmt) = dc_sqlite3_prepare( return ret;
context, }
&context.sql,
let conn_lock = context.sql.get_conn();
if let Some(ref mut stmt) = conn_lock.as_ref().and_then(|conn| {
conn.prepare(
"SELECT m.id FROM msgs m LEFT JOIN contacts ct \ "SELECT m.id FROM msgs m LEFT JOIN contacts ct \
ON m.from_id=ct.id LEFT JOIN chats c ON m.chat_id=c.id WHERE m.state=? \ ON m.from_id=ct.id LEFT JOIN chats c ON m.chat_id=c.id WHERE m.state=? \
AND m.hidden=0 \ AND m.hidden=0 \
AND m.chat_id>? \ AND m.chat_id>? \
AND ct.blocked=0 \ AND ct.blocked=0 \
AND (c.blocked=0 OR c.blocked=?) ORDER BY m.timestamp DESC,m.id DESC;", AND (c.blocked=0 OR c.blocked=?) ORDER BY m.timestamp DESC,m.id DESC;",
) { )
.ok()
}) {
match stmt.query_map(&[10, 9, if 0 != show_deaddrop { 2 } else { 0 }], |row| { match stmt.query_map(&[10, 9, if 0 != show_deaddrop { 2 } else { 0 }], |row| {
row.get(0) row.get(0)
}) { }) {
@@ -695,7 +700,6 @@ pub fn dc_get_fresh_msgs(context: &Context) -> *mut dc_array_t {
Err(_err) => {} Err(_err) => {}
} }
} }
}
ret ret
} }

View File

@@ -55,13 +55,8 @@ impl SQLite {
} }
} }
pub fn prepare(&self, sql: &str) -> rusqlite::Result<Statement> { pub fn get_conn(&self) -> std::sync::RwLockReadGuard<Option<Connection>> {
// TODO: switch to direct execution self.connection.read().unwrap()
unimplemented!()
// match &*self.connection.read().unwrap() {
// Some(ref conn) => conn.prepare(sql),
// None => panic!("Querying closed SQLite database"),
// }
} }
pub fn query_row<T, P, F>(&self, sql: &str, params: P, f: F) -> rusqlite::Result<T> pub fn query_row<T, P, F>(&self, sql: &str, params: P, f: F) -> rusqlite::Result<T>
@@ -866,13 +861,8 @@ pub fn dc_sqlite3_prepare<'a>(
sql: &'a SQLite, sql: &'a SQLite,
querystr: &'a str, querystr: &'a str,
) -> Option<Statement<'a>> { ) -> Option<Statement<'a>> {
match sql.prepare(querystr) { // TODO: remove once it is not used anymore
Ok(s) => Some(s), unimplemented!()
Err(err) => {
error!(context, 0, "Query failed: {} ({})", querystr, err);
None
}
}
} }
pub fn dc_sqlite3_is_open(sql: &SQLite) -> libc::c_int { pub fn dc_sqlite3_is_open(sql: &SQLite) -> libc::c_int {