예제 #1
0
  int wild_card_compare_unqlite_func(unqlite_context* context,
                                     int argc,
                                     unqlite_value** argv)
  {
    // Checking arguments.
    if (argc != 2)
    {
      // Invalid number of arguments.
      std::stringstream error_message;
      error_message << "`wild_card_compare' expected two arguments, received ";
      error_message << argc;
      unqlite_context_throw_error(context, UNQLITE_CTX_WARNING,
                                  error_message.str().c_str());
    }

    // First argument is the pattern.
    int string_length;
    const char* pattern = unqlite_value_to_string(argv[0], &string_length);
    if (string_length <= 0 || !pattern)
    {
      // Invalid argument.
      unqlite_context_throw_error(context, UNQLITE_CTX_WARNING,
          "wild_card_compare: first argument was an invalid string");
      return UNQLITE_ABORT;
    }

    // Second argument is the string.
    const char* string = unqlite_value_to_string(argv[1], &string_length);
    if (string_length <= 0 || !pattern)
    {
      // Invalid argument.
      unqlite_context_throw_error(context, UNQLITE_CTX_WARNING,
          "wild_card_compare: second argument was an invalid string");
      return UNQLITE_ABORT;
    }

    // Calling compare method.
    bool result = wild_card_compare(pattern, string);

    // Filling result of the Jx9 function.
    unqlite_result_bool(context, result);

    // Returning OK
    return UNQLITE_OK;
  }
예제 #2
0
QVariant VirtualMachine::createVariant(unqlite_value* pVal)
{
	if (unqlite_value_is_bool(pVal)) {
		int val = unqlite_value_to_bool(pVal);
		return QVariant(val != 0 ? true : false);
	}
	else if (unqlite_value_is_numeric(pVal)) {
		return QVariant(unqlite_value_to_int(pVal));
	}
	else if (unqlite_value_is_string(pVal)) {
		int nLen;
		const char* zVal = unqlite_value_to_string(pVal, &nLen);
		return QVariant(QString::fromUtf8(zVal, nLen));
	}
	// else if (unqlite_value_is_json_array(pVal)) {
	// 	unqlite_array_walk(pVal, walk_callback, this);			
	// }
	return QVariant();
}
Producer::Config::Config( const string& file, uint32_t id )
{
    // set default values
    prefix = Name("unnamed");
    sigverif_delay = NanoSeconds( 30345 );
    bloom_delay    = NanoSeconds( 2535 );
    
    // database and vm structs
    unqlite* db;
    unqlite_vm* vm;
    
    // initialize database
    int rc = unqlite_open( &db, ":mem:", UNQLITE_OPEN_READONLY );
    if( rc != UNQLITE_OK )
    {
        // something went wrong
        const char* err;
        int errlen;
        unqlite_config( db, UNQLITE_CONFIG_JX9_ERR_LOG,
                        &err, &errlen );
        cout << "Error: creating unqlite database: "
             << err << endl;
         exit(1);
    }

    // initialize unqlite vm
    rc = unqlite_compile_file( db, file.c_str(), &vm );
    if( rc != UNQLITE_OK )
    {
        // something went wrong
        const char* err;
        int errlen;
        unqlite_config( db, UNQLITE_CONFIG_JX9_ERR_LOG,
                        &err, &errlen );
        cout << "Error: compiling config script: "
             << err << endl;
         exit(1);
    }

    unqlite_value* id_val = unqlite_vm_new_scalar( vm );
    unqlite_value_int64( id_val, id );
    rc = unqlite_vm_config( vm, UNQLITE_VM_CONFIG_CREATE_VAR,
                            "ID", id_val );
    if( rc != UNQLITE_OK )
    {
        // something went wrong
        const char* err;
        int errlen;
        unqlite_config( db, UNQLITE_CONFIG_JX9_ERR_LOG,
                        &err, &errlen );
        cout << "Error: exporting ID to config: "
             << err << endl;
         exit(1);
    }
    unqlite_vm_release_value( vm, id_val );


    // execute config script
    rc = unqlite_vm_exec( vm );
    if( rc != UNQLITE_OK )
    {
        // something went wrong
        const char* err;
        int errlen;
        unqlite_config( db, UNQLITE_CONFIG_JX9_ERR_LOG,
                        &err, &errlen );
        cout << "Error: executing config script: "
             << err << endl;
         exit(1);
    }
    
    // retrieve config values
    const char* str;
    int len;
    unqlite_value* val;
    
    val = unqlite_vm_extract_variable( vm, "prefix" );
    if( val )
    {
        str = unqlite_value_to_string( val, &len );
        prefix = string(str, len );
    }

    val = unqlite_vm_extract_variable( vm, "sigverif_delay" );
    if( unqlite_value_is_float( val ) )
        sigverif_delay = Seconds( unqlite_value_to_double( val ) );
    if( unqlite_value_is_int( val ) )
        sigverif_delay = Seconds( unqlite_value_to_int64( val ) );

    val = unqlite_vm_extract_variable( vm, "bloom_delay" );
    if( unqlite_value_is_float( val ) )
       bloom_delay = Seconds( unqlite_value_to_double( val ) );
    if( unqlite_value_is_int( val ) )
        bloom_delay = Seconds( unqlite_value_to_int64( val ) );
 
    val = unqlite_vm_extract_variable( vm, "contents" );
    if( val && unqlite_value_is_json_array( val ) )
    {
        size_t count = unqlite_array_count( val );
        for( size_t i = 0 ; i < count ; i++ )
        {
            stringstream ss;
            string key;
            ss << i;
            ss >> key;
            unqlite_value* elem = unqlite_array_fetch
                                  ( val, key.c_str(), key.size() );
            
            if( elem && unqlite_value_is_json_object( elem ) )
            {
                unqlite_value* name_val = unqlite_array_fetch
                                      ( elem, "name", -1 );
                unqlite_value* size_val = unqlite_array_fetch
                                      ( elem, "size", -1 );
                unqlite_value* access_val =
                    unqlite_array_fetch( elem, "access_level", -1 );
                if( name_val && size_val && access_val
                  && unqlite_value_is_string( name_val )
                  && unqlite_value_is_int( size_val )
                  && unqlite_value_is_int( access_val ) )
                {
                    str = unqlite_value_to_string( name_val, &len );
                    size_t size = unqlite_value_to_int( size_val );
                    uint8_t access_level = unqlite_value_to_int
                                           ( access_val );
                    contents.emplace( string( str, len ),
                                      Config::Content
                                      { size, access_level } );
                }
            }
        }
    }
예제 #4
0
파일: wrappers.c 프로젝트: svkior/unqlitego
char * extract_variable_as_string(unqlite_value *unqlite_value,int *len){
    return unqlite_value_to_string(unqlite_value,len);
}