mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 01:16:31 +03:00
example of how to prepare now
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user