Tokens get_tokens( const String& s ) {
   Tokens res;
   char prev = ' ';
   String tmp;
   for ( auto c : s ) {
     if ( prev != ' ' && prev != c ) {
       res.push_back(tmp);
       prev = c;
       tmp = "";
       tmp += c;
     } else {
       prev = c;
       tmp += c;
     }
   }
   if ( tmp != "" )
     res.push_back(tmp);
   return res;
 }
Exemple #2
0
Tokens StrSplit(const std::string& src, const std::string& sep)
{
    Tokens r;
    std::string s;
    for (char i : src)
    {
        if (sep.find(i) != std::string::npos)
        {
            if (s.length()) r.push_back(s);
            s.clear();
        }
        else
        {
            s += i;
        }
    }
    if (s.length()) r.push_back(s);
    return r;
}
Exemple #3
0
Tokens StrSplit(const std::string& src, const std::string& sep)
{
    Tokens r;
    std::string s;
    for (std::string::const_iterator i = src.begin(); i != src.end(); ++i)
    {
        if (sep.find(*i) != std::string::npos)
        {
            if (s.length()) r.push_back(s);
            s = "";
        }
        else
        {
            s += *i;
        }
    }
    if (s.length()) r.push_back(s);
    return r;
}
Exemple #4
0
static void AddChildren(Tokens& tok, TreeNode* parent)
{
	TreeNode* cur = 0;
	while (tok.Good())
	{
		std::string str;
		tok >> str;
		if (!tok.Good() || str.at(0) == '}')
			return;
		if (str.at(0) == '{')
		{
			if (!cur)
				cur = parent->AddChild(TreeNode::strdup(""));
			AddChildren(tok, cur);
			continue;
		}

		cur = parent->AddChild(TreeNode::strdup(str));
	}
}
Exemple #5
0
//static
void Command::parseDump( Tokens& tokens, bool helpMode, Command*& result )
{
    if (tokens.size() < 3 && !helpMode) THROW( CWDB_ERR_PARSER, "Bad syntax: missing options in \"dump\" command" );

    switch( checkAngen( tokens, 1) ) {
        case ANGEN_COLLECTION: result = new DumpCollectionCommand; break;
        default: THROW( CWDB_ERR_PARSER, "Bad syntax: unrecognized option in \"dump\" command" );
    }

    if (result != 0 && !helpMode) result->parse( tokens );
}
Exemple #6
0
void Editor::autoComplete(const QString& item)
{
    if (!m_isAutoCompletionEnabled || item.isEmpty())
        return;

    const int currentPosition = textCursor().position();
    const QString subtext = text().left(currentPosition);
    const Tokens tokens = m_evaluator->scan(subtext);
    if (!tokens.valid() || tokens.count() < 1)
        return;

    const Token lastToken = tokens.at(tokens.count() - 1);
    if (!lastToken.isIdentifier())
        return;

    const QStringList str = item.split(':');

    blockSignals(true);
    QTextCursor cursor = textCursor();
    cursor.setPosition(lastToken.pos());
    cursor.setPosition(lastToken.pos() + lastToken.text().length(), QTextCursor::KeepAnchor);
    setTextCursor(cursor);
    insert(str.at(0));
    blockSignals(false);

    cursor = textCursor();
    bool hasParensAlready;
    if ((hasParensAlready = cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor))) {
        QString nextChar = cursor.selectedText();
        hasParensAlready = (nextChar == "(");
    }
    bool shouldAutoInsertParens = (FunctionRepo::instance()->find(str.at(0))
                                   || m_evaluator->hasUserFunction(str.at(0)))
                                  && !hasParensAlready;
    if (shouldAutoInsertParens) {
        insert(QString::fromLatin1("()"));
        cursor = textCursor();
        cursor.movePosition(QTextCursor::PreviousCharacter);
        setTextCursor(cursor);
    }
}
void RenameMetricCommand::parse(Tokens& tokens)
{
    if (tokens.size() != 5) THROW("Invalid RENAME METRIC command");

    if (tokens[2].m_angen != ANGEN_IDENT) THROW("Expected existing metric name");
    m_oldName = tokens[2].m_val.m_str;

    if (!checkString(tokens[3], "to")) THROW("Expected key word TO");

    if (tokens[4].m_angen != ANGEN_IDENT) THROW("Expected new metric name");
    m_newName = tokens[4].m_val.m_str;
}
void RenameDataspaceCommand::parse(Tokens& tokens)
{
    if (tokens.size() != 5) THROW("Invalid RENAME DATASPACE command");

    if (tokens[2].m_angen != ANGEN_IDENT) THROW("Expected existing dataspace name");
    m_oldName = tokens[2].m_val.m_str;

    if (!checkString(tokens[3], "to")) THROW("Expected key word TO");

    if (tokens[4].m_angen != ANGEN_IDENT) THROW("Expected new dataspace name");
    m_newName = tokens[4].m_val.m_str;
}
StringUtils::Tokens StringUtils::tokenize(const std::string& str, const std::string& delimiters)
{
	Tokens tokens;
    std::string::size_type delimPos = 0, tokenPos = 0, pos = 0;

	if(str.length()<1)  return tokens;
	while(1)
	{
		delimPos = str.find_first_of(delimiters, pos);
		tokenPos = str.find_first_not_of(delimiters, pos);
		if (tokenPos != std::string::npos && str[tokenPos]=='\"')
		{
			delimPos = str.find_first_of("\"", tokenPos+1);
			pos++;
		}

		if(std::string::npos != delimPos)
		{
			if(std::string::npos != tokenPos)
			{
				if(tokenPos<delimPos)
				{
					std::string token = str.substr(pos,delimPos-pos);
					if (token.length()) tokens.push_back(token);
				}
			}
			pos = delimPos+1;
		}
		else
		{
			if(std::string::npos != tokenPos)
			{
				std::string token = str.substr(pos);
				if (token.length()) tokens.push_back(token);
			}
			break;
		}
	}
	return tokens;
}
Exemple #10
0
int main()
{
    Code code("//bla bli blo\nflap");
    CodeRange cr(code);
    Tokens tokens;
    tokens.push_back(Token::Ptr(new Symbol(reduce(cr, 1))));
    tokens.push_back(Token::Ptr(new Symbol(reduce(cr, 1))));
    tokens.push_back(Token::Ptr(new Name(reduce(cr, 3))));
    tokens.push_back(Token::Ptr(new Whitespace(reduce(cr, 1))));
    tokens.push_back(Token::Ptr(new Name(reduce(cr, 3))));
    tokens.push_back(Token::Ptr(new Whitespace(reduce(cr, 1))));
    tokens.push_back(Token::Ptr(new Name(reduce(cr, 3))));
    tokens.push_back(Token::Ptr(new Newline(reduce(cr, 1))));
    tokens.push_back(Token::Ptr(new Name(reduce(cr, 4))));
    TokenRange tr(tokens);
    auto comment = Comment::construct(tr);
    return 0;
}
Exemple #11
0
inline void spansToTokens(std::string const& str, TokenSpans const& spans, Tokens &tokens) {
  if (str.empty()) return;
  char const* s = &str[0];
  unsigned i = 0, n = spans.size();
  tokens.resize(n);
  for (; i < n; ++i) {
    TokenSpan const& span = spans[i];
    assert(span.first < str.size());
    assert(span.second <= str.size());
    tokens[i].assign(s + span.first, s + span.second);
  }

}
Exemple #12
0
void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::string& address, uint32 port, uint8 icon, RealmFlags realmflags, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, const char* builds)
{
    // Create new if not exist or update existed
    Realm& realm = m_realms[name];

    realm.m_ID       = ID;
    realm.icon       = icon;
    realm.realmflags = realmflags;
    realm.timezone   = timezone;
    realm.allowedSecurityLevel = allowedSecurityLevel;
    realm.populationLevel      = popu;

    Tokens tokens = StrSplit(builds, " ");
    Tokens::iterator iter;

    for (iter = tokens.begin(); iter != tokens.end(); ++iter)
    {
        uint32 build = atol((*iter).c_str());
        realm.realmbuilds.insert(build);
    }

    uint16 first_build = !realm.realmbuilds.empty() ? *realm.realmbuilds.begin() : 0;

    realm.realmBuildInfo.build = first_build;
    realm.realmBuildInfo.major_version = 0;
    realm.realmBuildInfo.minor_version = 0;
    realm.realmBuildInfo.bugfix_version = 0;
    realm.realmBuildInfo.hotfix_version = ' ';

    if (first_build)
        if (RealmBuildInfo const* bInfo = FindBuildInfo(first_build))
            if (bInfo->build == first_build)
                realm.realmBuildInfo = *bInfo;

    // Append port to IP address.
    std::ostringstream ss;
    ss << address << ":" << port;
    realm.address   = ss.str();
}
Exemple #13
0
//static
void Command::parseDrop( Tokens& tokens, bool helpMode, Command*& result )
{
    if (tokens.size() < 3 && !helpMode) THROW( CWDB_ERR_PARSER, "Bad syntax: missing options in \"drop\" command" );

    switch( checkAngen( tokens, 1) ) {
        case ANGEN_DATASPACE:  result = new DropDataspaceCommand; break;
        case ANGEN_COLLECTION: result = new DropCollectionCommand; break;
        case ANGEN_METRIC:     result = new DropMetricCommand; break;
        default: THROW( CWDB_ERR_PARSER, "Bad syntax: unrecongized option in \"drop\" command" );
    }

    if (result != 0 && !helpMode) result->parse( tokens );
}
Exemple #14
0
void Editor::autoCalcSelection()
{
    if (!m_isAutoCalcEnabled)
        return;

    const QString str = m_evaluator->autoFix(textCursor().selectedText());
    if (str.isEmpty())
        return;

    // Very short (just one token) and still no calculation, then skip.
    if (!m_isAnsAvailable) {
        const Tokens tokens = m_evaluator->scan(text());
        if (tokens.count() < 2)
            return;
    }

    // Too short even after autofix? Don't bother either.
    const Tokens tokens = m_evaluator->scan(str);
    if (tokens.count() < 2)
        return;

    // Same reason as above, do not update "ans".
    m_evaluator->setExpression(str);
    const HNumber num = m_evaluator->evalNoAssign();

    if (m_evaluator->error().isEmpty()) {
        if (num.isNan() && m_evaluator->isUserFunctionAssign()) {
            // Result is not always available when assigning a user function.
            const QString message = tr("Selection result: n/a");
            emit autoCalcEnabled(message);
        } else {
            const QString message = tr("Selection result: <b>%1</b>").arg(NumberFormatter::format(num));
            emit autoCalcEnabled(message);
        }
    } else
        emit autoCalcEnabled(m_evaluator->error());
}
void ShowMetricCommand::parse(Tokens& tokens)
{
    if (tokens.size() < 3 || tokens[2].m_angen != ANGEN_IDENT) THROW("Invalid SHOW METRIC command");
    m_name = tokens[2].m_val.m_str;

    if (tokens.size() <= 3) return;

    map< string, int > attrs;
    parseAttributesIndex(tokens, 3, attrs);

    map< string, int >::iterator iter = attrs.begin();
    for ( ; iter != attrs.end(); ++iter) {
        int index = iter->second;

        if (boost::iequals(iter->first, "format")) {
            if (tokens[index].m_angen != ANGEN_IDENT) THROW("Expected time format identifier");
            if (checkString(tokens[index], "epoch"))
                m_epochTime = 1;
            else if (checkString(tokens[index], "iso"))
                m_epochTime = -1;
            else
                THROW(string("Invalid value for format. Epxected epoch or iso"));
        }
        else if (boost::iequals(iter->first, "local")) {
            if (tokens[index].m_angen != ANGEN_IDENT) THROW("Expected time local true/false");
            if (checkString(tokens[index], "true")) 
                m_localTime = 1;
            else if (checkString(tokens[index], "false"))
                m_localTime = -1;
            else
                THROW(string("Invalid value for local. Expected true or false"));
        }
        else {
            THROW(string("Unexpected attribute ")+iter->first+" in show command");
        }
    }
}
Exemple #16
0
void Sentence::tokenize()
{
	Tokens tokens;
	::tokenize(sent_,tokens);

	int i,n = tokens.size();

	Syllable sy;
	sy.span = 1;
	sy.sent_ = this;
	sy.start = 0;
	
	for (i = 0;i < n;i ++) {
		if (tokens[i].is_token) {
			/*
				char *viet_token = viet_to_viscii(tokens[i].value.c_str());
				if (!viet_token) {
				sy.id = get_sarch()[tokens[i].value];
				sy.cid = get_sarch()[string("6")+tokens[i].value];
				syllables.push_back(sy);
				} else {
			*/
			const char *viet_token = tokens[i].value.c_str();
			int jj,nn = strlen(viet_token);
			for (jj = 0;jj < nn;jj ++)
				if (viet_isalpha((unsigned char)viet_token[jj]) || viet_isdigit((unsigned char)viet_token[jj])) {
					string s = viet_token;
					sy.id = get_ngram()[s];
					sy.cid = get_ngram()[get_std_syllable(s)];
					syllables.push_back(sy);
					break;
				}
			/*}*/
		}
		sy.start += tokens[i].value.size();
	}
}
Exemple #17
0
bool DatabasePostgre::Initialize(const char *infoString)
{
    if(!Database::Initialize(infoString))
        return false;

    tranThread = NULL;

    InitDelayThread();

    Tokens tokens = StrSplit(infoString, ";");

    Tokens::iterator iter;

    std::string host, port_or_socket_dir, user, password, database;

    iter = tokens.begin();

    if(iter != tokens.end())
        host = *iter++;
    if(iter != tokens.end())
        port_or_socket_dir = *iter++;
    if(iter != tokens.end())
        user = *iter++;
    if(iter != tokens.end())
        password = *iter++;
    if(iter != tokens.end())
        database = *iter++;

    if (host == ".")
        mPGconn = PQsetdbLogin(NULL, port_or_socket_dir == "." ? NULL : port_or_socket_dir.c_str(), NULL, NULL, database.c_str(), user.c_str(), password.c_str());
    else
        mPGconn = PQsetdbLogin(host.c_str(), port_or_socket_dir.c_str(), NULL, NULL, database.c_str(), user.c_str(), password.c_str());

    /* check to see that the backend connection was successfully made */
    if (PQstatus(mPGconn) != CONNECTION_OK)
    {
        sLog.outError( "Could not connect to Postgre database at %s: %s",
            host.c_str(), PQerrorMessage(mPGconn));
        PQfinish(mPGconn);
        mPGconn = NULL;
        return false;
    }
    else
    {
        sLog.outDetail( "Connected to Postgre database at %s",
            host.c_str());
        sLog.outString( "PostgreSQL server ver: %d",PQserverVersion(mPGconn));
        return true;
    }

}
int ClangFunctionHintModel::activeArgument(const QString &prefix) const
{
    int argnr = 0;
    int parcount = 0;
    SimpleLexer tokenize;
    Tokens tokens = tokenize(prefix);
    for (int i = 0; i < tokens.count(); ++i) {
        const CPlusPlus::Token &tk = tokens.at(i);
        if (tk.is(T_LPAREN))
            ++parcount;
        else if (tk.is(T_RPAREN))
            --parcount;
        else if (! parcount && tk.is(T_COMMA))
            ++argnr;
    }

    if (parcount < 0)
        return -1;

    if (argnr != m_currentArg)
        m_currentArg = argnr;

    return argnr;
}
Exemple #19
0
//static
void Command::parseDescr( Tokens& tokens, bool helpMode, Command*& result )
{
    if (tokens.size() == 1) {
        result = new DescrCommand();
        return;
    }

    switch( checkAngen( tokens, 1) ) {
        case ANGEN_DATASPACE:  result = new DescrDataspaceCommand; break;
        case ANGEN_COLLECTION: result = new DescrCollectionCommand; break;
        case ANGEN_METRIC:     result = new DescrMetricCommand; break;
        default: THROW( CWDB_ERR_PARSER, "Bad syntax: unrecognized option in \"descr\" command" );
    }

    if (result != 0 && !helpMode) result->parse( tokens );
}
void CommandLineEngine::help(Print * printer, Tokens & tk, FunctionFlags ff)
{
	if (!printer)
		return;

	UserFunctions::iterator it;

	String arg;
	if( tk.next(arg) )
	{
		if( arg.equalsIgnoreCase("help") )
		{
			printer->println("Type help without any arguments to learn more.");
			return;
		}
		else if( arg.equalsIgnoreCase("set") )
		{
			set(printer, tk, FF_HelpText);
			return;
		}

		it = findFunction(arg);
		if( it == mUserFunctions.end() )
		{
			printer->print("Unable to locate the function: ");
			printer->println(arg);
			return;
		}
		// Call the function and tell it to display its help text
		it->func(printer, tk, FF_HelpText);
		return;
	}
	else
	{
		printer->println("Function Name: help");
		printer->println("Type help <function name> to learn more about that function.");
		printer->println("The following functions are defined:");
		printer->println("help");
		printer->println("set");

		// List all the functions
		for( it = mUserFunctions.begin(); it != mUserFunctions.end(); ++it)
		{
			printer->println(it->name);
		}
	}
}
Exemple #21
0
void Player::_LoadArchaeology(QueryResult* result)
{
    for (uint8 i = 0; i < MAX_RESEARCH_SITES; ++i)
        _digSites[i].count = 0;

    if (!sWorld.getConfig(CONFIG_BOOL_ARCHAEOLOGY_ENABLED))
    {
        delete result;
        return;
    }

    if (!result)
    {
        GenerateResearchSites();
        GenerateResearchProjects();
        return;
    }

    Field* fields = result->Fetch();

    // Loading current zones
    Tokens tokens = Tokens(fields[0].GetCppString(), ' ');
    if (tokens.size() != 0 && tokens.size() <= MAX_RESEARCH_SITES)
    {
        _researchSites.clear();

        for (uint8 i = 0; i < tokens.size(); ++i)
            _researchSites.insert(uint32(atoi(tokens[i])));
    }
    else
        GenerateResearchSites();

    // Loading current zone info
    tokens = Tokens(fields[1].GetCppString(), ' ');
    if (tokens.size() == MAX_RESEARCH_SITES)
    {
        for (uint8 i = 0; i < MAX_RESEARCH_SITES; ++i)
            _digSites[i].count = uint32(atoi(tokens[i]));
    }

    // Loading current projects
    tokens = Tokens(fields[2].GetCppString(), ' ');
    if (tokens.size() == MAX_RESEARCH_PROJECTS)
    {
        for (uint8 i = 0; i < MAX_RESEARCH_PROJECTS; ++i)
            if (ResearchProjectEntry const* entry = sResearchProjectStore.LookupEntry(atoi(tokens[i])))
                if (entry->IsVaid())
                    ReplaceResearchProject(0, entry->ID);
    }
    else
        GenerateResearchProjects();

    delete result;
}
Exemple #22
0
Params parseParams(Tokens& tokens) {
    Params r;
    while (tokens.peek()[0] == '"') {
        auto param = parseString(tokens);
        if (param.rfind("string", 0) == 0 || param.rfind("texture", 0) == 0 ||
            param.rfind("spectrum", 0) == 0)
            r.strings[param] = parseStrings(tokens);
        else if (param.rfind("integer", 0) == 0)
            r.ints[param] = parseInts(tokens);
        else if (param.rfind("bool", 0) == 0)
            r.bools[param] = parseBools(tokens);
        else
            r.reals[param] = parseReals(tokens);
    }

    return r;
}
Exemple #23
0
void Editor::doMatchingLeft()
{
    // Tokenize the expression.
    const int currentPosition = textCursor().position();

    // Check for right par.
    QString subtext = text().left(currentPosition);
    Tokens tokens = m_evaluator->scan(subtext, Evaluator::NoAutoFix);
    if (!tokens.valid() || tokens.count() < 1)
        return;
    Token lastToken = tokens.at(tokens.count() - 1);

    // Right par?
    if (lastToken.type() == Token::stxClosePar && lastToken.pos() == currentPosition - 1) {
        // Find the matching left par.
        unsigned par = 1;
        int matchPosition = -1;

        for (int i = tokens.count() - 2; i >= 0 && par > 0; --i) {
            Token matchToken = tokens.at(i);
            switch (matchToken.type()) {
                case Token::stxOpenPar : --par; break;
                case Token::stxClosePar: ++par; break;
                default:;
            }
            matchPosition = matchToken.pos();
        }

        if (par == 0) {
            QTextEdit::ExtraSelection hilite1;
            hilite1.cursor = textCursor();
            hilite1.cursor.setPosition(matchPosition);
            hilite1.cursor.setPosition(matchPosition + 1, QTextCursor::KeepAnchor);
            hilite1.format.setBackground(m_highlighter->colorForRole(SyntaxHighlighter::Matched));

            QTextEdit::ExtraSelection hilite2;
            hilite2.cursor = textCursor();
            hilite2.cursor.setPosition(lastToken.pos());
            hilite2.cursor.setPosition(lastToken.pos() + 1, QTextCursor::KeepAnchor);
            hilite2.format.setBackground(m_highlighter->colorForRole(SyntaxHighlighter::Matched));

            QList<QTextEdit::ExtraSelection> extras;
            extras << hilite1;
            extras << hilite2;
            setExtraSelections(extras);
        }
    }
}
Exemple #24
0
void Editor::doMatchingRight()
{
    // Tokenize the expression.
    const int currentPosition = textCursor().position();

    // Check for left par.
    QString subtext = text().right(text().length() - currentPosition);
    Tokens tokens = m_evaluator->scan(subtext);
    if (!tokens.valid() || tokens.count() < 1)
        return;
    Token firstToken = tokens.at(0);

    // Left par?
    if (firstToken.type() == Token::stxOpenPar && firstToken.pos() == 0) {
        // Find the matching right par.
        unsigned par = 1;
        int k = 0;
        Token matchToken;
        int matchPosition = -1;

        for (k = 1; k < tokens.count() && par > 0; ++k) {
            const Token matchToken = tokens.at(k);
            switch (matchToken.type()) {
                case Token::stxOpenPar : ++par; break;
                case Token::stxClosePar: --par; break;
                default:;
            }
            matchPosition = matchToken.pos();
        }

        if (par == 0) {
            QTextEdit::ExtraSelection hilite1;
            hilite1.cursor = textCursor();
            hilite1.cursor.setPosition(currentPosition+matchPosition);
            hilite1.cursor.setPosition(currentPosition+matchPosition + 1, QTextCursor::KeepAnchor);
            hilite1.format.setBackground(m_highlighter->colorForRole(SyntaxHighlighter::Matched));

            QTextEdit::ExtraSelection hilite2;
            hilite2.cursor = textCursor();
            hilite2.cursor.setPosition(currentPosition+firstToken.pos());
            hilite2.cursor.setPosition(currentPosition+firstToken.pos() + 1, QTextCursor::KeepAnchor);
            hilite2.format.setBackground(m_highlighter->colorForRole(SyntaxHighlighter::Matched));

            QList<QTextEdit::ExtraSelection> extras;
            extras << hilite1;
            extras << hilite2;
            setExtraSelections(extras);
        }
    }
}
Exemple #25
0
static NoCaseString getToken(unsigned& pos, const Tokens& toks, int symbol = SYMBOL)
{
	if (pos >= toks.getCount())
		generate_error("", UNEXPECTED_END_OF_COMMAND);

	NoCaseString curTok(NoCaseString(toks[pos].text, toks[pos].length));

	switch(symbol)
	{
	case SYMBOL:
		break;

	case STRING:
		if (!strchr(quotes, toks[pos].text[0]))
			generate_error(curTok, UNEXPECTED_TOKEN);
		return toks[pos++].stripped().ToNoCaseString();

	case NUMERIC:
		{
			const char* const end = &toks[pos].text[toks[pos].length];
			for (const char* ptr = toks[pos].text; ptr < end; ++ptr)
			{
				if (*ptr < '0' || *ptr > '9')
					generate_error(curTok, UNEXPECTED_TOKEN);
			}
		}
		break;

	default:
		if (symbol > 0 && symbol <= 127)	// good ascii symbol
		{
			if (toks[pos].length != 1 || toks[pos].text[0] != symbol)
				generate_error(curTok, UNEXPECTED_TOKEN);
		}
		fb_assert(false);
		break;
	}

	++pos;
	return curTok;
}
Exemple #26
0
//static
void Command::parseCreate( Tokens& tokens, bool helpMode, Command*& result )
{
    if (tokens.size() < 3 && !helpMode) THROW( CWDB_ERR_PARSER, "Bad syntax: missing options in \"create\" command" );

    switch( checkAngen(tokens, 1) ) {
        case ANGEN_DATASPACE:  result = new CreateDataspaceCommand; break;
        case ANGEN_COLLECTION: result = new CreateCollectionCommand; break;
        case ANGEN_METRIC:     result = new CreateMetricCommand; break;
        /******************
            if (tokens.size() < 3 && !helpMode) THROW( CWDB_ERR_PARSER, "Bad syntax: missing options in \"create metric\" command" );
            if (checkAngen( tokens, 3) == ANGEN_ASSIGN && !helpMode)
                result = new CreateAggregationCommand;
            else
                result = new CreateMetricCommand;
            break;
         *******************/
        default: THROW( CWDB_ERR_PARSER, "Bad syntax: unrecognized option in \"create\" command" );
    }

    if (result != 0 && !helpMode) result->parse( tokens );
}
Exemple #27
0
//static
void Command::parseUpdate( Tokens& tokens, bool helpMode, Command*& result )
{
    if (tokens.size() < 3 && !helpMode) THROW( CWDB_ERR_PARSER, "Bad syntax: missing options in \"update\" command" );

    CreateUpdateMode mode;

    tokens.erase( tokens.begin() );
    if ( checkString( tokens.front(), "or") ) {
        if (tokens[1].m_angen != ANGEN_CREATE) THROW( CWDB_ERR_PARSER, "Bad syntax: expected keyword \"create\"" );
        tokens.erase( tokens.begin() );
        mode = CRM_CREATE_UPDATE;
    }
    else {
        Token dummy;
        dummy.m_angen = ANGEN_CREATE;
        tokens.insert( tokens.begin(), dummy );
        mode = CRM_UPDATE;
    }

    switch( checkAngen(tokens, 1) ) {
        case ANGEN_DATASPACE:  result = new CreateDataspaceCommand( mode ); break;
        case ANGEN_COLLECTION: result = new CreateCollectionCommand( mode ); break;
        case ANGEN_METRIC:     result = new CreateMetricCommand( mode ); break;
        /*************************
            if (tokens.size() < 3 && !helpMode) THROW( CWDB_ERR_PARSER, "Bad syntax: missing options in \"create metric\" command" );
            if (checkAngen( tokens, 3) == ANGEN_ASSIGN && !helpMode)
                result = new CreateAggregationCommand( mode );
            else
                result = new CreateMetricCommand( mode );
            break;
         **************************/
        default: THROW( CWDB_ERR_PARSER, "Bad syntax: unrecognized option in \"create\" command" );
    }

    if (result != 0 && !helpMode) {
        result->parse( tokens );
    }
}
Exemple #28
0
bool DatabaseMysql::Initialize(const char *infoString)
{
    if (!Database::Initialize(infoString))
        return false;

    tranThread = NULL;
    MYSQL *mysqlInit;
    mysqlInit = mysql_init(NULL);
    if (!mysqlInit)
    {
        sLog.outError("Could not initialize Mysql connection");
        return false;
    }

    InitDelayThread();

    Tokens tokens = StrSplit(infoString, ";");

    Tokens::iterator iter;

    std::string host, port_or_socket, user, password, database;
    int port;
    char const* unix_socket;

    iter = tokens.begin();

    if (iter != tokens.end())
        host = *iter++;
    if (iter != tokens.end())
        port_or_socket = *iter++;
    if (iter != tokens.end())
        user = *iter++;
    if (iter != tokens.end())
        password = *iter++;
    if (iter != tokens.end())
        database = *iter++;

    mysql_options(mysqlInit, MYSQL_SET_CHARSET_NAME, "utf8");
    #ifdef WIN32
    if (host==".")                                           // named pipe use option (Windows)
    {
        unsigned int opt = MYSQL_PROTOCOL_PIPE;
        mysql_options(mysqlInit, MYSQL_OPT_PROTOCOL, (char const*)&opt);
        port = 0;
        unix_socket = 0;
    }
    else                                                    // generic case
    {
        port = atoi(port_or_socket.c_str());
        unix_socket = 0;
    }
    #else
    if (host==".")                                           // socket use option (Unix/Linux)
    {
        unsigned int opt = MYSQL_PROTOCOL_SOCKET;
        mysql_options(mysqlInit, MYSQL_OPT_PROTOCOL, (char const*)&opt);
        host = "localhost";
        port = 0;
        unix_socket = port_or_socket.c_str();
    }
    else                                                    // generic case
    {
        port = atoi(port_or_socket.c_str());
        unix_socket = 0;
    }
    #endif

    mMysql = mysql_real_connect(mysqlInit, host.c_str(), user.c_str(),
        password.c_str(), database.c_str(), port, unix_socket, 0);

    if (mMysql)
    {
        sLog.outDetail("Connected to MySQL database at %s", host.c_str());
        sLog.outString("MySQL client library: %s", mysql_get_client_info());
        sLog.outString("MySQL server ver: %s ", mysql_get_server_info( mMysql));

        if (!mysql_autocommit(mMysql, 1))
            sLog.outDetail("AUTOCOMMIT SUCCESSFULLY SET TO 1");
        else
            sLog.outDetail("AUTOCOMMIT NOT SET TO 1");

        // set connection properties to UTF8 to properly handle locales for different
        // server configs - core sends data in UTF8, so MySQL must expect UTF8 too
        PExecute("SET NAMES `utf8`");
        PExecute("SET CHARACTER SET `utf8`");

    #if MYSQL_VERSION_ID >= 50003
        my_bool my_true = (my_bool)1;
        if (mysql_options(mMysql, MYSQL_OPT_RECONNECT, &my_true))
            sLog.outDetail("Failed to turn on MYSQL_OPT_RECONNECT.");
        else
           sLog.outDetail("Successfully turned on MYSQL_OPT_RECONNECT.");
    #else
        #warning "Your mySQL client lib version does not support reconnecting after a timeout.\nIf this causes you any trouble we advice you to upgrade your mySQL client libs to at least mySQL 5.0.13 to resolve this problem."
    #endif

        return true;
    }
    else
    {
        sLog.outError("Could not connect to MySQL database at %s: %s\n", host.c_str(),mysql_error(mysqlInit));
        mysql_close(mysqlInit);
        return false;
    }
}
void DropDataspaceCommand::parse(Tokens& tokens)
{
    if (tokens.size() != 3 || tokens[2].m_angen != ANGEN_IDENT) THROW("Invalid DROP DATASPACE command");
    m_name = tokens[2].m_val.m_str;
}
void CreateDataspaceCommand::parse(Tokens& tokens)
{
    if (tokens.size() < 3 || tokens[2].m_angen != ANGEN_IDENT) THROW("Invalid CREATE DATASPACE command");
    m_name = tokens[2].m_val.m_str;
    if (tokens.size() > 3) parseAttributes(tokens, 3, m_attrs);
}