Beispiel #1
0
Value SqlStatement::Fetch(Sql& cursor) const {
    ASSERT(text.GetCount());
    if(!Execute(cursor))
        return ErrorValue(SqlExc(cursor.GetSession()));
    if(!cursor.Fetch())
        return Null;
    return cursor[0];
}
Beispiel #2
0
String ForceInsertRowid(const String& insert, Sql& cursor)
{
    if(!cursor.Execute(insert + " returning ROWID into ?%s"))
        throw SqlExc(cursor.GetSession());
    if(!cursor.Fetch())
        throw Exc(t_("FETCH internal error (ForceInsertRowid)"));
    ASSERT(!IsNull(cursor[0]));
    return cursor[0];
}
Beispiel #3
0
bool Sql::Execute() {
	SqlSession &session = GetSession();

	session.SetStatement(cn->statement);
	session.SetStatus(SqlSession::BEFORE_EXECUTING);
	cn->starttime = GetTickCount();
	Stream *s = session.GetTrace();
	if(s) {
#ifndef NOAPPSQL
		if(this == &AppCursor())
			*s << "SQL* ";
		else
		if(this == &AppCursorR())
			*s << "SQLR* ";
#endif
		String st = cn->statement;
		if(session.IsTraceCompression())
			st = CompressLog(st);
		int i = 0;
		for(const char *q = st; *q; q++)
			if(*q == '?' && i < param.GetCount()) {
				Value v = param[i++];
				if(IsString(v))
					*s << '\'' << v << '\'';
				else
					*s << v;
			}
			else
				s->Put(*q);
		*s << '\n';
	}
	if(!session.IsOpen())
	{
		session.SetStatus(SqlSession::CONNECTION_ERROR);
		return false;
	}
	session.SetStatus(SqlSession::START_EXECUTING);
	bool b = cn->Execute();
	session.SetTime(GetTickCount() - cn->starttime);
	session.SetStatus(SqlSession::END_EXECUTING);
	if(!b)
		session.SetStatus(SqlSession::EXECUTING_ERROR);
	for(int i = 0; i < cn->info.GetCount(); i++)
		cn->info[i].name = ToUpper(cn->info[i].name);

	session.SetStatus(SqlSession::AFTER_EXECUTING);
	if(!b && session.throwonerror)
		throw SqlExc(GetSession());
	return b;
}
Beispiel #4
0
void SqlStatement::Force(Sql& cursor) const {
    ASSERT(text.GetCount());
    if(!cursor.Execute(*this))
        throw SqlExc(cursor.GetSession());
}
Beispiel #5
0
void ForceExecute(const String& s, Sql& cursor)
{
    if(!cursor.Execute(s))
        throw SqlExc(cursor);
}
Beispiel #6
0
void ForceDelete(SqlId table, SqlId key, const Value& keyval, Sql& cursor)
{
    if(!cursor.Delete(table, key, keyval))
        throw SqlExc(cursor);
}
Beispiel #7
0
void Sql::ExecuteX() {
	if(!Execute())
		throw SqlExc(GetSession());
}