Exemplo n.º 1
0
    const char * CouchbaseRowBuilder::nextField(const RtlFieldInfo * field)
    {
        m_fieldsProcessedCount++;
        if (!m_oResultRow)
            failx("Missing result row data");

        const char * fieldname = field->name->queryStr();
        if (!fieldname || !*fieldname)
            failx("Missing result column metadata (name)");

        if (!m_oResultRow->hasProp(fieldname))
        {
            VStringBuffer nxpath("locationData/%s", fieldname);
            if (m_oNestedField)
            {
                if (!m_oNestedField->hasProp(fieldname))
                {
                    StringBuffer xml;
                    toXML(m_oResultRow, xml);
                    failx("Result row does not contain field: %s: %s", fieldname, xml.str());
                }

                return m_oNestedField->queryProp(fieldname);
            }
        }
        return m_oResultRow->queryProp(fieldname);
    }
Exemplo n.º 2
0
 void bindRealParam(double value, const RtlFieldInfo * field, Couchbase::QueryCommand * pQcmd)
 {
     VStringBuffer cbPlaceholder("$%s", field->name->queryStr());
     if (pQcmd)
     {
         StringBuffer serialized;
         TokenSerializer tokenSerializer;
         tokenSerializer.serialize(value, serialized);
         auto status = pQcmd->named_param(cbPlaceholder.str(), serialized.str());
         if (!status.success())
             failx("Could not bind Param: %s val: %s", cbPlaceholder.str(), serialized.str());
     }
     else
         failx("Internal error: detected invalid CouchbaseQueryCommand while attempting to bind to field: %s", cbPlaceholder.str());
 }
Exemplo n.º 3
0
 void bindUnicodeParam(unsigned chars, const UChar *value, const RtlFieldInfo * field, Couchbase::QueryCommand * pQcmd)
 {
     VStringBuffer cbPlaceholder("$%s", field->name->queryStr());
     if (pQcmd)
     {
         size32_t utf8chars;
         char *utf8;
         rtlUnicodeToUtf8X(utf8chars, utf8, chars, value);
         auto status = pQcmd->named_param(cbPlaceholder.str(), utf8);
         if (!status.success())
             failx("Could not bind Param: %s val: %s", cbPlaceholder.str(), utf8);
     }
     else
         failx("Internal error: detected invalid CouchbaseQueryCommand while attempting to bind to field: %s", cbPlaceholder.str());
 }
Exemplo n.º 4
0
    void bindDataParam(unsigned len, const void *value, const RtlFieldInfo * field, Couchbase::QueryCommand * pQcmd)
    {
        VStringBuffer cbPlaceholder("$%s", field->name->queryStr());
        if (pQcmd)
        {
            size32_t bytes;
            void *data;
            rtlStrToDataX(bytes, data, len, value);

            auto status = pQcmd->named_param(cbPlaceholder.str(), (char *)data);
            if (!status.success())
                failx("Could not bind Param: %s val: %s", cbPlaceholder.str(), (char *)data);
        }
        else
            failx("Internal error: detected invalid CouchbaseQueryCommand while attempting to bind to field: %s", cbPlaceholder.str());
    }
Exemplo n.º 5
0
static int svstatus_get(void)
{
	if ((fd = open_write("supervise/ok")) == -1) {
		if (errno == ENODEV) {
			*acts == 'x' ? ok("runsv not running")
			             : failx("runsv not running");
			return 0;
		}
		warn_cannot("open supervise/ok");
		return -1;
	}
	close(fd);
	if ((fd = open_read("supervise/status")) == -1) {
		warn_cannot("open supervise/status");
		return -1;
	}
	r = read(fd, svstatus, 20);
	close(fd);
	switch (r) {
	case 20: break;
	case -1: warn_cannot("read supervise/status"); return -1;
	default: warnx_cannot("read supervise/status: bad format"); return -1;
	}
	return 1;
}
Exemplo n.º 6
0
   Couchbase::Query * CouchbaseConnection::query(Couchbase::QueryCommand * qcommand)
   {
       Couchbase::Status queryStatus;
       Couchbase::Query * pQuery = new Couchbase::Query(*m_pCouchbaseClient, *qcommand, queryStatus);

       if (!queryStatus)
           failx("Couldn't issue query: %s", queryStatus.description());

       if (!pQuery->status())
           failx("Couldn't execute query, reason: %s\nBody is: ", pQuery->meta().body().data());

       if (pQuery->meta().status().errcode() != LCB_SUCCESS )//rows.length() == 0)
           failx("Query execution error: %s", m_pQuery->meta().body().data());

       return pQuery;
   }
Exemplo n.º 7
0
    void CouchbaseEmbedFunctionContext::execute()
    {
        if (m_oInputStream)
            m_oInputStream->executeAll(m_oCBConnection);
        else
        {
            m_pQuery = m_oCBConnection->query(m_pQcmd);

            if (m_pQuery->meta().status().errcode() != LCB_SUCCESS )//rows.length() == 0)
                failx("Query execution error: %s", m_pQuery->meta().body().to_string().c_str());
            if (m_pQuery->status().errcode())
                failx("Query error: %s", m_pQuery->status().description());

            //consider parsing json result
            if (strstr(m_pQuery->meta().body().to_string().c_str(), "\"status\": \"errors\""))
                failx("Err: %s", m_pQuery->meta().body().data());
        }
    }
Exemplo n.º 8
0
    CouchbaseEmbedFunctionContext::CouchbaseEmbedFunctionContext(const IContextLogger &_logctx, const char *options, unsigned _flags)
    : logctx(_logctx), m_NextRow(), m_nextParam(0), m_numParams(0), m_scriptFlags(_flags)
    {
        cbQueryIterator = NULL;
        m_pCouchbaseClient = nullptr;
        m_pQuery = nullptr;
        m_pQcmd = nullptr;

        const char *server = "localhost";
        const char *user = "";
        const char *password = "";
        const char *bucketname = "default";
        unsigned port = 8093;
        bool useSSL = false;
        StringBuffer connectionOptions;

        StringArray inputOptions;
        inputOptions.appendList(options, ",");
        ForEachItemIn(idx, inputOptions)
        {
            const char *opt = inputOptions.item(idx);
            const char *val = strchr(opt, '=');
            if (val)
            {
                StringBuffer optName(val-opt, opt);
                val++;
                if (stricmp(optName, "server")==0)
                    server = val;   // Note that lifetime of val is adequate for this to be safe
                else if (stricmp(optName, "port")==0)
                    port = atoi(val);
                else if (stricmp(optName, "user")==0)
                    user = val;
                else if (stricmp(optName, "password")==0)
                    password = val;
                else if (stricmp(optName, "bucket")==0)
                    bucketname = val;
                else if (stricmp(optName, "useSSL")==0)
                    useSSL = clipStrToBool(val);

                //Connection String options
                else if (stricmp(optName,   "detailed_errcodes")==0
                        || stricmp(optName, "operation_timeout")==0
                        || stricmp(optName, "config_total_timeout")==0
                        || stricmp(optName, "http_poolsize")==0
                        || stricmp(optName, "detailed_errcodes")==0)
                    connectionOptions.appendf("%s%s=%s", connectionOptions.length() == 0 ? "?" : "&", optName.str(), val);
                else
                    failx("Unknown option %s", optName.str());
            }
        }

        m_oCBConnection.setown(new CouchbaseConnection(useSSL, server, port, bucketname, user, password, connectionOptions.str()));
        m_oCBConnection->connect();
    }
Exemplo n.º 9
0
 void CouchbaseEmbedFunctionContext::bindUnicodeParam(const char *name, size32_t chars, const UChar *val)
 {
     checkNextParam(name);
     VStringBuffer cbPlaceholder("$%s", name);
     size32_t utf8chars;
     char *utf8;
     rtlUnicodeToUtf8X(utf8chars, utf8, chars, val);
     auto status = m_pQcmd->named_param(cbPlaceholder.str(), utf8);
     if (!status.success())
         failx("Could not bind Param: %s val: %s", cbPlaceholder.str(), utf8);
 }
Exemplo n.º 10
0
 const MYSQL_BIND &nextField(const RtlFieldInfo * field)
 {
     if (colIdx < resultInfo.numColumns())
         colIdx++;
     else
         fail("Too many fields in ECL output row");
     const MYSQL_BIND &column = resultInfo.queryColumn(colIdx);
     if (*column.error)
         failx("Error fetching column %s", field->name->queryStr());
     return column;
 }
Exemplo n.º 11
0
    void CouchbaseEmbedFunctionContext::bindRealParam(const char *name, double val)
    {
        checkNextParam(name);
        StringBuffer serialized;
        m_tokenSerializer.serialize(val, serialized);
        VStringBuffer cbPlaceholder("$%s", name);

        auto status = m_pQcmd->named_param(cbPlaceholder.str(), serialized.str());
        if (!status.success())
            failx("Could not bind Param: %s val: %s", cbPlaceholder.str(), serialized.str());
    }
Exemplo n.º 12
0
    CouchbaseRowStream::CouchbaseRowStream(IEngineRowAllocator* resultAllocator, Couchbase::Query * cbaseQuery)
       :   m_CouchBaseQuery(cbaseQuery),
           m_resultAllocator(resultAllocator)
    {
        m_currentRow = 0;
        m_shouldRead = true;

        //iterating over result rows and copying them to stringarray
        //is there a way to independently step through original result rows?
        for (auto cbrow : *m_CouchBaseQuery)
            m_Rows.append(cbrow.json().to_string().c_str());

        if (m_CouchBaseQuery->meta().status().errcode() != LCB_SUCCESS )//rows.length() == 0)
            failx("Embedded couchbase error: %s", m_CouchBaseQuery->meta().body().data());
        else if (m_Rows.length() == 0) // Query errors not reported in meta.status, lets check for errors in meta body
        {
            if (strstr(m_CouchBaseQuery->meta().body().data(), "\"status\": \"errors\""))
                failx("Err: %s", m_CouchBaseQuery->meta().body().data());
        }
    }
Exemplo n.º 13
0
 void CouchbaseEmbedFunctionContext::bindDataParam(const char *name, size32_t len, const void *val)
 {
     checkNextParam(name);
     VStringBuffer cbPlaceholder("$%s", name);
     size32_t bytes;
     void *data;
     rtlStrToDataX(bytes, data, len, val);
     auto status = m_pQcmd->named_param(cbPlaceholder.str(), (char *)data);
     if (!status.success())
         failx("Could not bind Param: %s val: %s", cbPlaceholder.str(), (char *)data);
 }
Exemplo n.º 14
0
    const char * CouchbaseEmbedFunctionContext::nextResultScalar()
    {
        auto resultrow = nextResultRowIterator();
        if (resultrow)
        {
            resultrow->first();
            if(resultrow->isValid() == true)
            {
                if (resultrow->query().hasChildren())
                    typeError("scalar", "");
                return resultrow->query().queryProp("");
            }

            else
                failx("Could not fetch next result column.");
        }
        else
            failx("Could not fetch next result row.");

        return nullptr;
    }
Exemplo n.º 15
0
Arquivo: process.c Projeto: kjn/lbzip2
/* Create a POSIX thread with error checking. */
static pthread_t
xcreate(void (*entry)(void))
{
  int err;
  pthread_t thread;

  err = pthread_create(&thread, NULL, thread_entry, entry);
  if (err != 0)
    failx(err, "unable to create a POSIX thread");

  return thread;
}
Exemplo n.º 16
0
 IPropertyTreeIterator * CouchbaseEmbedFunctionContext::nextResultRowIterator()
 {
     for (auto cbrow : *m_pQuery)
     {
         auto json = cbrow.json().to_string();
         Owned<IPropertyTree> contentTree = createPTreeFromJSONString(json.c_str());
         if (contentTree)
             return contentTree->getElements("./*");
         failx("Could not fetch next result row.");
         break;
     }
     return nullptr;
 }
Exemplo n.º 17
0
    void CouchbaseEmbedFunctionContext::compileEmbeddedScript(size32_t chars, const char *script)
    {
        if (script && *script)
        {
            m_pQcmd = new Couchbase::QueryCommand(script);

            if ((m_scriptFlags & EFnoparams) == 0)
                m_numParams = countParameterPlaceholders(script);
            else
                m_numParams = 0;
        }
        else
            failx("Empty N1QL query detected");
    }
Exemplo n.º 18
0
static int control(char *a)
{
	if (svstatus_get() <= 0) return -1;
	if (svstatus[17] == *a) return 0;
	if ((fd = open_write("supervise/control")) == -1) {
		if (errno != ENODEV)
			warn_cannot("open supervise/control");
		else
			*a == 'x' ? ok("runsv not running") : failx("runsv not running");
		return -1;
	}
	r = write(fd, a, strlen(a));
	close(fd);
	if (r != strlen(a)) {
		warn_cannot("write to supervise/control");
		return -1;
	}
	return 1;
}
Exemplo n.º 19
0
int control(char *a) {
  if (svstatus_get() <= 0) return(-1);
  if (svstatus[17] == *a)
    if (*a != 'd' || svstatus[18] == 1) return(0); /* once w/o term */
  if ((fd =open_write("supervise/control")) == -1) {
    if (errno != error_nodevice)
      warn("unable to open supervise/control");
    else
      *a == 'x' ? ok("runsv not running") : failx("runsv not running");
    return(-1);
  }
  r =write(fd, a, str_len(a));
  close(fd);
  if (r != str_len(a)) {
    warn("unable to write to supervise/control");
    return(-1);
  }
  return(1);
}
Exemplo n.º 20
0
 const void * CouchbaseRowStream::nextRow()
 {
     const void * result = NULL;
     if (m_shouldRead && m_currentRow < m_Rows.length())
     {
         auto json = m_Rows.item(m_currentRow++);
         Owned<IPropertyTree> contentTree = createPTreeFromJSONString(json,ipt_caseInsensitive);
         if (contentTree)
         {
             CouchbaseRowBuilder * cbRowBuilder = new CouchbaseRowBuilder(contentTree);
             RtlDynamicRowBuilder rowBuilder(m_resultAllocator);
             const RtlTypeInfo *typeInfo = m_resultAllocator->queryOutputMeta()->queryTypeInfo();
             assertex(typeInfo);
             RtlFieldStrInfo dummyField("<row>", NULL, typeInfo);
             size32_t len = typeInfo->build(rowBuilder, 0, &dummyField, *cbRowBuilder);
             return rowBuilder.finalizeRowClear(len);
         }
         else
             failx("Error processing result row");
     }
     return result;
 }
Exemplo n.º 21
0
static void
ipdivert_bind(const char *test, int s, u_short port, int expect)
{
	struct sockaddr_in sin;
	int err;

	bzero(&sin, sizeof(sin));
	sin.sin_family = AF_INET;
	sin.sin_addr.s_addr = htonl(INADDR_ANY);
	sin.sin_port = htons(port);

	err = bind(s, (struct sockaddr *)&sin, sizeof(sin));
	if (err < 0) {
		if (expect == 0)
			fail(test, "bind");
		if (errno != expect)
			fail(test, "bind");
	} else {
		if (expect != 0)
			failx(test, "bind");
	}
}
Exemplo n.º 22
0
int svstatus_get() {
  if ((fd =open_write("supervise/ok")) == -1) {
    if (errno == error_nodevice) {
      *acts == 'x' ? ok("runsv not running") : failx("runsv not running");
      return(0);
    }
    warn("unable to open supervise/ok");
    return(-1);
  }
  close(fd);
  if ((fd =open_read("supervise/status")) == -1) {
    warn("unable to open supervise/status");
    return(-1);
  }
  r =read(fd, svstatus, 20);
  close(fd);
  switch(r) {
  case 20: break;
  case -1: warn("unable to read supervise/status"); return(-1);
  default: warnx("unable to read supervise/status: bad format"); return(-1);
  }
  return(1);
}
Exemplo n.º 23
0
 unsigned CouchbaseEmbedFunctionContext::checkNextParam(const char *name)
 {
     if (m_nextParam == m_numParams)
         failx("Too many parameters supplied: No matching $<name> placeholder for parameter %s", name);
     return m_nextParam++;
 }