Home | History | Annotate | Download | only in sql
      1 /*
      2  * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #ifndef SQLiteStatement_h
     27 #define SQLiteStatement_h
     28 
     29 #include "SQLiteDatabase.h"
     30 
     31 struct sqlite3_stmt;
     32 
     33 namespace WebCore {
     34 
     35 class SQLValue;
     36 
     37 class SQLiteStatement {
     38     WTF_MAKE_NONCOPYABLE(SQLiteStatement); WTF_MAKE_FAST_ALLOCATED;
     39 public:
     40     SQLiteStatement(SQLiteDatabase&, const String&);
     41     ~SQLiteStatement();
     42 
     43     int prepare();
     44     int bindBlob(int index, const void* blob, int size);
     45     int bindBlob(int index, const String&);
     46     int bindText(int index, const String&);
     47     int bindInt(int index, int);
     48     int bindInt64(int index, int64_t);
     49     int bindDouble(int index, double);
     50     int bindNull(int index);
     51     int bindValue(int index, const SQLValue&);
     52     unsigned bindParameterCount() const;
     53 
     54     int step();
     55     int finalize();
     56     int reset();
     57 
     58     int prepareAndStep() { if (int error = prepare()) return error; return step(); }
     59 
     60     // prepares, steps, and finalizes the query.
     61     // returns true if all 3 steps succeed with step() returning SQLITE_DONE
     62     // returns false otherwise
     63     bool executeCommand();
     64 
     65     // prepares, steps, and finalizes.
     66     // returns true is step() returns SQLITE_ROW
     67     // returns false otherwise
     68     bool returnsAtLeastOneResult();
     69 
     70     bool isExpired();
     71 
     72     // Returns -1 on last-step failing.  Otherwise, returns number of rows
     73     // returned in the last step()
     74     int columnCount();
     75 
     76     bool isColumnNull(int col);
     77     String getColumnName(int col);
     78     SQLValue getColumnValue(int col);
     79     String getColumnText(int col);
     80     double getColumnDouble(int col);
     81     int getColumnInt(int col);
     82     int64_t getColumnInt64(int col);
     83     const void* getColumnBlob(int col, int& size);
     84     String getColumnBlobAsString(int col);
     85     void getColumnBlobAsVector(int col, Vector<char>&);
     86 
     87     bool returnTextResults(int col, Vector<String>&);
     88     bool returnIntResults(int col, Vector<int>&);
     89     bool returnInt64Results(int col, Vector<int64_t>&);
     90     bool returnDoubleResults(int col, Vector<double>&);
     91 
     92     SQLiteDatabase* database() { return &m_database; }
     93 
     94     const String& query() const { return m_query; }
     95 
     96 private:
     97     SQLiteDatabase& m_database;
     98     String m_query;
     99     sqlite3_stmt* m_statement;
    100 #ifndef NDEBUG
    101     bool m_isPrepared;
    102 #endif
    103 };
    104 
    105 } // namespace WebCore
    106 
    107 #endif // SQLiteStatement_h
    108