Example #1
0
        internal List <T> ExecuteQuery()
        {
            // don't execute queries twice
            if (result != null)
            {
                return(result);
            }

            // execute query
            Tuple <string, SQLiteParameter[]> prepared = PrepareQuery();

            result = new List <T>();
            using (DatabaseConnection connection = db.OpenConnection())
            {
                using (Query query = connection.CreateQuery(prepared.Item1, prepared.Item2))
                {
                    while (query.Reader.Read())
                    {
                        T obj = factory.CreateObject(query.Reader);
                        if (finalize != null)
                        {
                            obj = finalize(obj);
                        }
                        result.Add(obj);
                    }
                }
            }

            return(result);
        }
Example #2
0
        public int Count()
        {
            // if we already know it, just return that instead of querying again
            if (result != null)
            {
                return(result.Count);
            }

            // execute the query
            Tuple <string, SQLiteParameter[]> prepared = PrepareQuery();
            string sql = "SELECT COUNT(*) AS count FROM (" + prepared.Item1 + ") tbl";

            using (DatabaseConnection conn = db.OpenConnection())
            {
                using (Query query = conn.CreateQuery(sql, prepared.Item2))
                {
                    query.Reader.Read();
                    return(query.Reader.ReadInt32(0));
                }
            }
        }