示例#1
0
bool Command::DoReadParam( void )
{
	Variable* var = mpVM->mVariables[ mObject ];
	
	if( mpVM->mArgcRun <= mObject )
	{
		var->AssignValue( mpExpr->get_Value() );
		return true;
	}
	
	sqlite3_value* vl = mpVM->mpArgv[ mObject ];
	switch( sqlite3_value_type( vl ) )
	{
		case kDouble	: var->AssignValue( sqlite3_value_double( vl ) ); break;
		case kInt		: var->AssignValue( sqlite3_value_int( vl ) ); break;
		
		case kText		:
		{
			const char* str = (const char*) sqlite3_value_text( vl );
			wstring wstr;
			ConvertFromUTF8( str, strlen( str ), wstr );
			
			var->AssignValue( wstr );
		}
		break;
		
		default:
			var->AssignValue( Value() );
			break;
	}
	
	return true;
}
示例#2
0
bool Command::DoFetch( void )
{
	// TODO: exceptions

	Cursor* cr = mpVM->mCursors[ mObject ];

	// TODO: exception
	if( !cr->mpStmt || !cr->mpStatQ )
		return true;

	cr->mpStatQ->ApplyBinds();
	int res = sqlite3_step( cr->mpStmt );
	bool step = ( res == SQLITE_ROW );

	// Update %FOUND and %NOTFOUND properties
	cr->GetVarFound()->AssignValue( step );
	cr->GetVarNotFound()->AssignValue( !step );

	// TODO: exception
	if( !step )
		return true;

	Value vl;

	// Read values from cursor
	int count = min<int>( mFields.size(), sqlite3_column_count( cr->mpStmt ) );
	for( int i = 0 ; i < count ; ++i )
	{
		Variable* var = mpVM->mVariables[ mFields[ i ] ];
		ReadValue( cr->mpStmt, vl, i, var->mValue.mType );
		var->AssignValue( vl );
	}

	return true;
}
示例#3
0
Variable* AddGlobalVariable(
	const wstring&	name,
	const Value&	value )
{
	Variable* var = FindGlobalVariable( name );
	if( var )
		return var;

	var = new Variable;
	var->AssignValue( value );
	gGlobalVariables[ name ] = var;
	
	return var;
}