Ejemplo n.º 1
0
SqlStatement SqlCreateTable::As(const SqlSelect& select)
{
    String text = "create ";
    if(!permanent)
        text << "temporary ";
    text << "table " << table.Quoted()
         << " as (" + SqlStatement(select).GetText() + ")";
    return SqlStatement(text);
}
Ejemplo n.º 2
0
SqlUpdate::operator SqlStatement() const {
    StringBuffer stmt;
    stmt << "update " << table.Quoted() << " set " << ~set;
    if(sel.IsValid())
        stmt << SqlStatement(sel).GetText().Mid(9 + 2 * SqlId::IsUseQuotes());
    else if(!where.IsEmpty())
        stmt << " where " << ~where;
    return SqlStatement(stmt);
}
Ejemplo n.º 3
0
SqlInsert::operator SqlStatement() const {
    String s = "insert into " + table.Quoted();
    if(!set1.IsEmpty()) {
        s << set1();
        if(sel.IsValid())
            s << ' ' << SqlStatement(sel).GetText();
        else if(!set2.IsEmpty())
            s << " values " << set2();
    }
    return SqlStatement(s);
}
Ejemplo n.º 4
0
SqlStatement Database::CreateStatement(SqlStatementID& index, const char* fmt)
{
    int nId = -1;
    //check if statement ID is initialized
    if (!index.initialized())
    {
        //convert to lower register
        std::string szFmt(fmt);
        //count input parameters
        int nParams = std::count(szFmt.begin(), szFmt.end(), '?');
        //find existing or add a new record in registry
        LOCK_GUARD _guard(m_stmtGuard);
        PreparedStmtRegistry::const_iterator iter = m_stmtRegistry.find(szFmt);
        if (iter == m_stmtRegistry.end())
        {
            nId = ++m_iStmtIndex;
            m_stmtRegistry[szFmt] = nId;
        }
        else
            nId = iter->second;

        //save initialized statement index info
        index.init(nId, nParams);
    }

    return SqlStatement(index, *this);
}
Ejemplo n.º 5
0
SqlUpdate::operator SqlStatement() const {
    StringBuffer stmt;
    stmt << "update " << table.Quoted() << " set " << ~set;
    if(!where.IsEmpty())
        stmt << " where " << ~where;
    return SqlStatement(stmt);
}
Ejemplo n.º 6
0
SqlWith& SqlWith::As(const SqlSelect& select)
{
    if(args)
        text << ')';
    text << " as (" + SqlStatement(select).GetText() + ")";
    args = false;
    return *this;
}
Ejemplo n.º 7
0
SqlInsert::operator SqlStatement() const {
    String s = "insert into " + table.Quoted();
    if(!set1.IsEmpty()) {
        s << set1();
        if(from.IsEmpty() && where.IsEmpty() && groupby.IsEmpty()) {
            if(!set2.IsEmpty())
                s << " values " << set2();
        }
        else {
            SqlSelect sel;
            sel = Select(set2).From(from).Where(where);
            if(!groupby.IsEmpty())
                sel.GroupBy(groupby);
            if(!having.IsEmpty())
                sel.Having(having);
            s << ' ' + SqlStatement(sel).GetText();
        }
    }
    return SqlStatement(s);
}
Ejemplo n.º 8
0
SqlStatement SqlDatabase::sqlCompile(const char* szSQL) {
	require(mpDB);

	const char* szTail=0;
	sqlite3_stmt* pVM;

	const int result = sqlite3_prepare_v2(mpDB, szSQL, -1, &pVM, &szTail);
	assert(szTail != 0);
	const bool extra_statements = (szTail[0] != '\0'); // was (szTail && szTail[0] != '\0')
	if (result != SQLITE_OK)
		throw SqlDatabaseException(sqlite3_errmsg(mpDB));
	if (extra_statements)
		throw SqlDatabaseException("sqlCompile() only compiles the first statement; other statements have been ignored.");
	return SqlStatement(pVM);
}
Ejemplo n.º 9
0
SqlStatement SqlDatabase::sqlQueryVar(const char* szSQL, va_list args) {
	require(mpDB);

	char* szSqlFormatted = sqlite3_vmprintf(szSQL, args);
	if (!szSqlFormatted)
		throw new SqlDatabaseException("Unable to apply format to SQL string");
	const char* szTail=0;
	sqlite3_stmt* pVM;
	
	const int result = sqlite3_prepare_v2(mpDB, szSqlFormatted, -1, &pVM, &szTail);
	assert(szTail != 0);
	const bool extra_statements = (szTail[0] != '\0'); // was (szTail && szTail[0] != '\0')
	sqlite3_free(szSqlFormatted);
	if (result != SQLITE_OK)
		throw SqlDatabaseException(sqlite3_errmsg(mpDB));
	if (extra_statements)
		throw SqlDatabaseException("sqlQuery() only compiles the first statement; other statements have been ignored.");
	
	return SqlStatement(pVM).execute();
}
Ejemplo n.º 10
0
SqlStatement SqlWith::operator()(const SqlDelete& deletes)
{
    return SqlStatement(text + " " + SqlStatement(deletes).GetText());
}
Ejemplo n.º 11
0
SqlStatement SqlWith::operator()(const SqlUpdate& update)
{
    return SqlStatement(text + " " + SqlStatement(update).GetText());
}
Ejemplo n.º 12
0
SqlStatement SqlWith::operator()(const SqlInsert& insert)
{
    return SqlStatement(text + " " + SqlStatement(insert).GetText());
}
Ejemplo n.º 13
0
SqlSelect SqlWith::operator()(const SqlSelect& select)
{
    SqlSet set;
    set.SetRaw(text + " " + SqlStatement(select).GetText());
    return set;
}
Ejemplo n.º 14
0
void ForceInsert(SqlId table, Fields nf, Sql& cursor)
{
    SqlUtil::InsertColumns helper;
    nf(helper);
    cursor & SqlStatement(helper.Get(table));
}
Ejemplo n.º 15
0
String ForceInsertRowid(const SqlInsert& insert, Sql& cursor)
{
    return ForceInsertRowid(SqlStatement(insert).Get(cursor.GetDialect()), cursor);
}