Beispiel #1
0
        public void test_error()
        {
            using (sqlite3 db = ugly.open(":memory:"))
            {
                db.exec("CREATE TABLE foo (x int UNIQUE);");
                db.exec("INSERT INTO foo (x) VALUES (3);");
                bool fail = false;
                try
                {
                    db.exec("INSERT INTO foo (x) VALUES (3);");
                }
                catch (ugly.sqlite3_exception e)
                {
                    fail = true;

                    int errcode = db.errcode();
                    Assert.AreEqual(errcode, e.errcode);
                    Assert.AreEqual(errcode, raw.SQLITE_CONSTRAINT);

                    Assert.AreEqual(db.extended_errcode(), raw.SQLITE_CONSTRAINT_UNIQUE, "Extended error codes for SQLITE_CONSTRAINT were added in 3.7.16");

                    string errmsg = db.errmsg();
                    Assert.IsTrue(errmsg != null);
                    Assert.IsTrue(errmsg.Length > 0);
                }
                Assert.IsTrue(fail);

                Assert.IsTrue(raw.sqlite3_errstr(raw.SQLITE_CONSTRAINT) != null);
            }
        }
Beispiel #2
0
 private static void check_ok(sqlite3 db, int rc)
 {
     if (raw.SQLITE_OK != rc)
     {
         throw new sqlite3_exception(rc, db.errmsg());
     }
 }
        /// <summary>
        /// Executes only read-only SQL.
        /// </summary>
        /// <returns>The query.</returns>
        /// <param name="sql">Sql.</param>
        /// <param name="paramArgs">Parameter arguments.</param>
        public Cursor RawQuery(String sql, params Object[] paramArgs)
        {
            if (!IsOpen)
            {
                Open(Path);
            }

            Cursor       cursor  = null;
            sqlite3_stmt command = null;

            var t = Factory.StartNew(() =>
            {
                try {
                    Log.V(Tag, "RawQuery sql: {0} ({1})", sql, String.Join(", ", paramArgs.ToStringArray()));
                    command = BuildCommand(_readConnection, sql, paramArgs);
                    cursor  = new Cursor(command);
                } catch (Exception e) {
                    if (command != null)
                    {
                        command.Dispose();
                    }
                    var args = paramArgs == null
                    ? String.Empty
                    : String.Join(",", paramArgs.ToStringArray());
                    Log.E(Tag, "Error executing raw query '{0}' is values '{1}' {2}".Fmt(sql, args, _readConnection.errmsg()), e);
                    throw;
                }
                return(cursor);
            });

            return(t.Result);
        }
Beispiel #4
0
        /// <summary>
        /// Executes only read-only SQL.
        /// </summary>
        /// <returns>The query.</returns>
        /// <param name="sql">Sql.</param>
        /// <param name="paramArgs">Parameter arguments.</param>
        public Cursor RawQuery(String sql, params Object[] paramArgs)
        {
            if (!IsOpen)
            {
                throw new CouchbaseLiteException("RawQuery called on closed database", StatusCode.BadRequest);
            }

            Cursor       cursor  = null;
            sqlite3_stmt command = null;

            var t = Factory.StartNew(() =>
            {
                try {
                    Log.V(TAG, "RawQuery sql: {0} ({1})", sql, String.Join(", ", paramArgs.ToStringArray()));
                    command = BuildCommand(_readConnection, sql, paramArgs);
                    cursor  = new Cursor(command);
                } catch (Exception e) {
                    if (command != null)
                    {
                        command.Dispose();
                    }
                    var args = paramArgs == null
                    ? String.Empty
                    : String.Join(",", paramArgs.ToStringArray());
                    Log.E(TAG, "Error executing raw query '{0}' is values '{1}' {2}".Fmt(sql, args, _readConnection.errmsg()), e);
                    LastErrorCode = raw.sqlite3_errcode(_readConnection);
                    throw;
                }
                return(cursor);
            });

            return(t.Result);
        }