Example #1
0
/* effective comparison */
int	nid_cmp_effective(xptr node1, xptr node2) {

    if (node1 == node2) return 0;

    CHECKP(node1);
	t_prefix p1 = nid_get_prefix(node1);
	unsigned char* ptr1 = p1.prefix;
	shft size1 = p1.size;
	CHECKP(node2);
	t_nid* nd = &((internal::node_base_t*)XADDR(node2))->nid;
	shft size2 = nd->size;
	unsigned char* ptr2=nd->prefix;
	if (size2 == 0)
	{
		xptr ps	= *(xptr*)ptr2;
		size2=*(shft*)(nd->prefix+sizeof(xptr));
		CHECKP(ps);
		ptr2=(unsigned char*)XADDR(BLOCKXPTR(ps)) + *(shft*)XADDR(ps);
	}

	int result = sign(memcmp(ptr1,ptr2,min(size1,size2))); /// There is no guarantee that memcmp returns 1, -1, 0!
	if (!result)
	{
        if (size1 > size2) {
            result = (ptr1[size2] == ALPHABET_SIZE) ? 1 : 2;
        } else {
            result = (ptr2[size1] == ALPHABET_SIZE) ? -1 : -2;
        }
	}
	nid_free(p1.prefix);
	return result;
}
Example #2
0
void update_insert_sequence(xptr node,schema_node_cptr icell)
{
    cat_list<ft_index_cell_xptr>::item* obj=icell->ft_index_list->first;
    if (obj == NULL) return;
    CHECKP(node);
    xptr ind=nodeGetIndirection(node);
    while (obj!=NULL)
    {
        update_insert_sequence(ind,ft_index_cell_cptr(obj->object));
        obj=obj->next;
    }
    CHECKP(node);
}
Example #3
0
/*t_prefix tp;*/
void	nid_delete(xptr node) {
    CHECKP(node);
	bool	vroot = getNodeType(node) == virtual_root;

	t_nid	the_nid = nid_get_nid(node);

	/* free the pstr contents */
	if (the_nid.size==0 /*CHANGED BY LEON*/)
	{
		//statistics
		shft nids=(*(shft*)(the_nid.prefix+sizeof(xptr)));
		schema_node_cptr scm=getSchemaNode(node);
        scm.modify();
		scm->extnids-=nids;
		if (IS_DATA_BLOCK(node))
			scm->root.modify()->total_ext_nids-=nids;
		xptr	blk = BLOCKXPTR((*(xptr*)the_nid.prefix));
		if (
			pstr_do_deallocate(blk, *(xptr*)(the_nid.prefix), *(shft*)(the_nid.prefix+sizeof(xptr)), true)
			&& scm->root->ext_nids_block==blk
			)
			scm->root.modify()->ext_nids_block=XNULL;
		/*--------------------------------------------------------
		>>> this is debug case when prefix is allocated just in memory
		delete[] (char*)XADDR(*(xptr*)the_nid.prefix);
		--------------------------------------------------------*/
	}
}
Example #4
0
void apply_after_replace_triggers(xptr new_node, xptr old_node, xptr where_var, schema_node_cptr scm_node)
{
   	if (tr_globals::internal_auth_switch == BLOCK_AUTH_CHECK) return;

    // care about after-statement triggers
    find_triggers_for_node(scm_node, TRIGGER_REPLACE_EVENT, TRIGGER_AFTER, TRIGGER_FOR_EACH_STATEMENT, &after_statement_triggers);

    if (old_node==XNULL) return; //old_var==XNULL if there are no for-each-node-after-triggers
    CHECKP(old_node);

    //if the node is not element or attribute - return
    t_item node_type = scm_node->type;
    if((node_type!=element)&&(node_type!=attribute))
        return;

   	t_triggers_set treated_triggers;
    trigger_cell_cptr trc = XNULL;
    while(true)
    {
        trc = find_trigger_for_node(scm_node, TRIGGER_REPLACE_EVENT, TRIGGER_AFTER, TRIGGER_FOR_EACH_NODE, &treated_triggers);
        if(!trc.found())
            return;
        trc->execute_trigger_action(new_node, old_node, where_var);
        treated_triggers.insert(trc.ptr());
    }
}
Example #5
0
void apply_before_replace_for_each_statement_triggers(xptr_sequence* target_seq, bool target_seq_direct)
{
    t_scmnodes_set scmnodes;
    t_scmnodes_set::iterator scmnodes_iter;
    t_triggers_set triggers;
    t_triggers_set::iterator triggers_iter;
    xptr_sequence::iterator it1;
    std::set<trigger_cell_xptr>::iterator set_triggers_iter;

   	if (tr_globals::internal_auth_switch == BLOCK_AUTH_CHECK) return;

    //if there are no statement level triggers at all - return
    if(!has_statement_triggers(TRIGGER_REPLACE_EVENT, TRIGGER_BEFORE)) return;

	//1. create a set of schema nodes
   	it1=target_seq->begin();
    while(it1!=target_seq->end())
    {
		xptr p=indirectionDereferenceCP(*it1);
		CHECKP(p);
        schema_node_cptr scn=getSchemaNode(p);
        scmnodes.insert(scn.ptr());
        it1++;
    }
    //2. find statement triggers on the nodes from the node set
    for(scmnodes_iter=scmnodes.begin(); scmnodes_iter!=scmnodes.end(); scmnodes_iter++)
    {
        find_triggers_for_node(*scmnodes_iter, TRIGGER_REPLACE_EVENT, TRIGGER_BEFORE, TRIGGER_FOR_EACH_STATEMENT, &triggers);
        for(triggers_iter=triggers.begin(); triggers_iter!=triggers.end(); triggers_iter++)
            (*triggers_iter)->execute_trigger_action(XNULL, XNULL, XNULL);
    }
}
Example #6
0
void apply_after_insert_triggers(xptr new_var, xptr where_var, schema_node_cptr scm_node)
{
   	if (tr_globals::internal_auth_switch == BLOCK_AUTH_CHECK) return;

	//if insert while constructor
	if (IS_TMP_BLOCK(where_var)) return;

    if ((new_var==XNULL)||(where_var==XNULL)) throw SYSTEM_EXCEPTION("Bad parameters");

    CHECKP(new_var);
	scm_node = getSchemaNode(new_var);
    //if the node is not element or attribute - return
    t_item node_type = getNodeType(new_var);
    if((node_type!=element)&&(node_type!=attribute))
        return;

	// care about after-statement triggers
    find_triggers_for_node(scm_node, TRIGGER_INSERT_EVENT, TRIGGER_AFTER, TRIGGER_FOR_EACH_STATEMENT, &after_statement_triggers);

	t_triggers_set treated_triggers;
    trigger_cell_cptr trc = XNULL;
    while(true)
    {
        trc = find_trigger_for_node(scm_node, TRIGGER_INSERT_EVENT, TRIGGER_AFTER, TRIGGER_FOR_EACH_NODE, &treated_triggers);
        if(!trc.found())
            return;
        trc->execute_trigger_action(new_var, XNULL, where_var);
        treated_triggers.insert(trc.ptr());
    }
}
Example #7
0
void catalog_update_metadata()
{
    CHECKP(catalog_masterblock);
    memcpy(
        &(local_catalog->masterdata),
        &(((catalog_master_record *) XADDR(catalog_masterblock))->masterdata),
        sizeof(catalog_name_trees));
}
Example #8
0
void	nid_assign(xptr node, t_prefix p) {
	internal::node_base_t*	dsc;
	xptr	tmp;
	xptr	blk;
	dsc = (internal::node_base_t*)XADDR(node);
	CHECKP(node);
	if (p.size <= MAXINTERNALPREFIX)
	{

		VMM_SIGNAL_MODIFICATION(node);
		memcpy(dsc->nid.prefix, p.prefix, p.size);
		dsc->nid.size=(unsigned char)p.size;
	}
	else
	{
		if (p.size > PSTRMAXSIZE)
		{
			dsc->nid.prefix[0]=1;
			dsc->nid.size=1;
            moSetUserException(SE2023);
		}
		if (IS_DATA_BLOCK(node)) {
			nid_holder=getSchemaNode(node)->root;
            U_ASSERT(nid_holder != XNULL);
        }
		blk = nid_get_blk(p.size, IS_DATA_BLOCK(node));
		tmp = pstr_do_allocate(blk, (char*) p.prefix, p.size);
/*--------------------------------------------------------
>>> this is the debug case of keeping prefix just in memory
		tmp.addr = se_new char[prefix_size];
		strcpy((char*)tmp.addr, prefix);
--------------------------------------------------------*/
		CHECKP(node);
		VMM_SIGNAL_MODIFICATION(node);
		memcpy(dsc->nid.prefix, (char*)&tmp, sizeof(xptr));
		*(shft*)(dsc->nid.prefix + sizeof(xptr)) = p.size;
		dsc->nid.size = 0;
		//statistics
		getSchemaNode(node).modify()->extnids+=p.size;
		if (IS_DATA_BLOCK(node))
			nid_holder.modify()->total_ext_nids+=p.size;

	}
}
Example #9
0
xptr apply_before_insert_triggers(xptr new_var, xptr where_var)
{
   	if (tr_globals::internal_auth_switch == BLOCK_AUTH_CHECK) return new_var;

	//if insert while constructor
	if (IS_TMP_BLOCK(where_var)) return new_var;

    if ((new_var==XNULL)||(where_var==XNULL)) throw SYSTEM_EXCEPTION("Bad parameters");

    CHECKP(new_var);
    const char* name=getSchemaNode(new_var)->get_name();
    t_item node_type = getNodeType(new_var);

    //if the node is not element or attribute - return
   	if((node_type!=element)&&(node_type!=attribute))
       	return new_var;

	t_triggers_set treated_triggers;
    schema_node_cptr scm_parent_node = XNULL;

    CHECKP(where_var);
    scm_parent_node=getSchemaNode(where_var);

    trigger_cell_cptr trc = XNULL;
    while(true)
	{
		if(scm_parent_node->find_first_child(NULL_XMLNS, name, node_type)<0)
            trc = find_trigger_for_newly_inserted_node(scm_parent_node, name, node_type, &treated_triggers);
        else
            trc = find_trigger_for_node(scm_parent_node->get_first_child(NULL_XMLNS, name, node_type), TRIGGER_INSERT_EVENT, TRIGGER_BEFORE, TRIGGER_FOR_EACH_NODE, &treated_triggers);

		if(!trc.found())
			return new_var;
        new_var=trc->execute_trigger_action(new_var, XNULL, where_var);
		if(new_var == XNULL)
			return new_var;
		node_type = getNodeType(new_var);
		if((node_type!=element)&&(node_type!=attribute))
			return new_var;
        name=getSchemaNode(new_var)->get_name();
        treated_triggers.insert(trc.ptr());
    }
}
Example #10
0
int main(int argc, char** argv) {
  if (getenv("RACKMOND_FOREGROUND") == NULL) {
    daemon(0, 0);
  }
  signal(SIGPIPE, SIG_IGN);
  int error = 0;
  world.paused = 0;
  world.modbus_timeout = 300000;
  if (getenv("RACKMOND_TIMEOUT") != NULL) {
    world.modbus_timeout = atoll(getenv("RACKMOND_TIMEOUT"));
    fprintf(stderr, "Timeout from env: %dms\n",
        (world.modbus_timeout / 1000));
  }
  world.config = NULL;
  pthread_mutex_init(&world.lock, NULL);
  verbose = getenv("RACKMOND_VERBOSE") != NULL ? 1 : 0;
  openlog("rackmond", 0, LOG_USER);
  syslog(LOG_INFO, "rackmon/modbus service starting");
  CHECK(open_rs485_dev(DEFAULT_TTY, DEFAULT_GPIO, &world.rs485));
  pthread_t monitoring_thread;
  pthread_create(&monitoring_thread, NULL, monitoring_loop, NULL);
  struct sockaddr_un local, client;
  int sock = socket(AF_UNIX, SOCK_STREAM, 0);
  strcpy(local.sun_path, "/var/run/rackmond.sock");
  local.sun_family = AF_UNIX;
  int socknamelen = sizeof(local.sun_family) + strlen(local.sun_path);
  unlink(local.sun_path);
  CHECKP(bind, bind(sock, (struct sockaddr *)&local, socknamelen));
  CHECKP(listen, listen(sock, 5));
  syslog(LOG_INFO, "rackmon/modbus service listening");
  while(1) {
    socklen_t clisocklen = sizeof(struct sockaddr_un);
    int clisock = accept(sock, (struct sockaddr*) &client, &clisocklen);
    CHECKP(accept, clisock);
    CHECK(handle_connection(clisock));
  }

cleanup:
  if (error != 0) {
    error = 1;
  }
  return error;
}
Example #11
0
void PPFnNamespaceUriForPrefix::do_next(xqp_tuple &t)
{
    if (first_time)
    {
        tuple_cell prefix_tc;
        const char *prefix = "";
        child_prefix.op->next(t);
        if (!t.is_eos())
        {
            if (!(child_prefix.get(t).is_atomic()) || child_prefix.get(t).get_atomic_type() != xs_string)
                throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:namespace-uri-for-prefix function");

            prefix_tc = tuple_cell::make_sure_light_atomic(child_prefix.get(t));
            prefix = prefix_tc.get_str_mem();

            child_prefix.op->next(t);
            if (!(t.is_eos())) throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:namespace-uri-for-prefix function");
        }

        child_element.op->next(t);
        if (t.is_eos())
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:namespace-uri-for-prefix function");

        if (!child_element.get(t).is_node())
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:namespace-uri-for-prefix function");

        child_element.op->next(t);
        if (!(t.is_eos()))
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:namespace-uri-for-prefix function");

        xptr node = child_element.get(t).get_node();

        CHECKP(node);
        if (getNodeType(node) != element)
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:namespace-uri-for-prefix function");

        scoped_ptr<InscopeNamespaceMap> inscopeNamespaces = new InscopeNamespaceMap(node, cxt->get_static_context()->getStaticallyKnownNamespaces());

        xmlns_ptr x = inscopeNamespaces->resolvePrefix(prefix);

        if (x != NULL_XMLNS) {
            t.copy(tuple_cell::atomic_deep(xs_anyURI, x->get_uri()));
            first_time = false;
            return;
        } else if (*prefix == '\0') {
            // For default prefix we should always return some value.
            t.copy(EMPTY_STRING_TC);
            first_time = false;
            return;
        }
    }

    first_time = true;
    t.set_eos();
}
Example #12
0
xptr triggers_test(xptr new_var, xptr where_var, const char* name, t_item node_type)
{
    if(name==NULL)
    {
        name=getSchemaNode(new_var)->get_name();
		CHECKP(where_var);
        name=getSchemaNode(new_var)->get_name();
		node_type = getNodeType(new_var);
    }
	return new_var;
}
Example #13
0
/*
 * Get nid of node descriptor "dsc" uploading native block of this descriptor
 */
t_nid
nid_get_nid(xptr node) {
	t_nid	result;
	internal::node_base_t*	dsc;

    CHECKP(node);
	/* dsc now points to descriptor inside in-memory block */
	dsc = (internal::node_base_t*)XADDR(node);
	result = dsc->nid;
	return result;
}
Example #14
0
/*
	initialize the node descriptor with given nid (prefix, dc)
	blk is the block where to store prefix string
 */
void nid_assign_pers_data(xptr node,char* data,int size)
{
		xptr blk = nid_get_blk(size, true);
		xptr tmp = pstr_do_allocate(blk, data, size);
		CHECKP(node);
		internal::node_base_t* dsc=(internal::node_base_t*)XADDR(node);
		VMM_SIGNAL_MODIFICATION(node);
		memcpy(dsc->nid.prefix, (char*)&tmp, sizeof(xptr));
		*(shft*)(dsc->nid.prefix + sizeof(xptr)) = size;
		dsc->nid.size = 0;
}
Example #15
0
xptr xptr_sequence::get(int pos)
{
    if (pos < SEQ_NUMBER_OF_XPTRS_IN_MEMORY) return mem_xptrs[pos];

    int b_ind = (pos - SEQ_NUMBER_OF_XPTRS_IN_MEMORY) / XPTRS_IN_BLOCK;
    int o_ind = (pos - SEQ_NUMBER_OF_XPTRS_IN_MEMORY) % XPTRS_IN_BLOCK;
    xptr p = blk_arr[b_ind] + sizeof(seq_blk_hdr) + o_ind * sizeof(xptr);

    CHECKP(p);

    return *(xptr*)(XADDR(p));
}
Example #16
0
int main(void)
{
  const char *filedir = "dirfile";
  const char *format = "dirfile/format";
  const char *format_data = "data BIT in1 3 4\n";
  int fd, n, error, r = 0;
  DIRFILE *D;
  gd_entry_t E;

  rmdirfile();
  mkdir(filedir, 0777);

  fd = open(format, O_CREAT | O_EXCL | O_WRONLY, 0666);
  write(fd, format_data, strlen(format_data));
  close(fd);

  D = gd_open(filedir, GD_RDONLY | GD_VERBOSE);

  n = gd_entry(D, "data", &E);
  error = gd_error(D);

  gd_close(D);
  unlink(format);
  rmdir(filedir);

  CHECKI(error, GD_E_OK);
  CHECKI(n, 0);
  CHECKS(E.field, "data");
  CHECKI(E.field_type, GD_BIT_ENTRY);
  CHECKS(E.in_fields[0], "in1");
  CHECKI(E.EN(bit,bitnum), 3);
  CHECKI(E.EN(bit,numbits), 4);
  CHECKP(E.scalar[0]);
  CHECKP(E.scalar[1]);
  gd_free_entry_strings(&E);

  return r;
}
Example #17
0
static
xptr get_root (xptr node)
{
    CHECKP(node);
    xptr tmp=node;
    while (true)
    {
        xptr parent = nodeGetParent(tmp);
        if (parent == XNULL) {
            return tmp;
        }
        tmp = parent;
    }
}
Example #18
0
int main(void)
{
  const char *filedir = "dirfile";
  const char *format = "dirfile/format";
  int error, r = 0;
  DIRFILE *D;

  gd_entry_t E, e;
  E.field = "data";
  E.field_type = GD_LINCOM_ENTRY;
  E.fragment_index = 0;
  E.EN(lincom,n_fields) = 1;
  E.comp_scal = 0;
  E.in_fields[0] = "INDEX";
  E.EN(lincom,m)[0] = 1.;
  E.scalar[0] = NULL;
  E.scalar[0 + GD_MAX_LINCOM] = "c";
  E.scalar_ind[0 + GD_MAX_LINCOM] = 3;

  rmdirfile();
  D = gd_open(filedir, GD_RDWR | GD_CREAT | GD_VERBOSE);
  gd_add_spec(D, "c CARRAY INT64 1 2 3 4", 0);
  gd_add(D, &E);
  error = gd_error(D);

  /* check */
  gd_entry(D, "data", &e);
  if (gd_error(D))
    r = 1;
  else {
    CHECKI(e.field_type, GD_LINCOM_ENTRY);
    CHECKI(e.fragment_index, 0);
    CHECKI(e.EN(lincom,n_fields), 1);
    CHECKF(e.EN(lincom,m)[0], 1);
    CHECKF(e.EN(lincom,b)[0], 4);
    CHECKP(e.scalar[0]);
    CHECKS(e.scalar[0 + GD_MAX_LINCOM], "c");
    CHECKI(e.scalar_ind[0 + GD_MAX_LINCOM], 3);
    gd_free_entry_strings(&e);
  }

  gd_close(D);

  unlink(format);
  rmdir(filedir);

  CHECKI(error, GD_E_OK);

  return r;
}
Example #19
0
void init_ft_sequences (const xptr& left, const xptr& right, const xptr& parent)
{
    if (IS_TMP_BLOCK(left)||IS_TMP_BLOCK(right)||IS_TMP_BLOCK(parent)) return;
    xptr tmp;
    schema_node_cptr scn = XNULL;
    if (parent!=XNULL)
    {
        tmp=parent;
        CHECKP(parent);
        scn = getSchemaNode(parent);
    }
    else
    {
        tmp=(left==XNULL)?right:left;
        CHECKP(tmp);
        scn = getSchemaNode(tmp)->parent;
    }

    if (scn->root == scn.ptr() || scn->root->full_ft_index_list->empty()) return;

    while (scn.found())
    {
        cat_list<ft_index_cell_xptr>::item* obj=scn->ft_index_list->first;
        if (obj!=NULL)
        {
            tmp=getNodeAncestorIndirectionByScheme(tmp,scn);
            while (obj!=NULL)
            {
                update_update_sequence(tmp,ft_index_cell_cptr(obj->object));
                obj=obj->next;
            }
            tmp=indirectionDereferenceCP(tmp);
        }
        scn=scn->parent;
    }
}
Example #20
0
void xptr_sequence::add(const xptr &p)
{
    if (seq_size++ < SEQ_NUMBER_OF_XPTRS_IN_MEMORY)
    {
        mem_xptrs.push_back(p);
        return;
    }

    if (eblk == XNULL) init_blks();
    CHECKP(eblk);

    // Allocate new block?
    if (SEQ_BLK_FREE_SPACE(XADDR(eblk)) < sizeof(xptr))
    { 
        xptr new_blk;
        vmm_alloc_tmp_block(&new_blk);
        seq_blk_hdr::init(XADDR(new_blk));

        blks_num++;
        blk_arr.push_back(new_blk);

        CHECKP(eblk);
        VMM_SIGNAL_MODIFICATION(eblk);

        SEQ_BLK_HDR(eblk)->nblk = new_blk;

        eblk = new_blk;

        CHECKP(eblk);
    }

    xptr* dest_xptr = (xptr*)(SEQ_BLK_CURSOR(XADDR(eblk)));
    VMM_SIGNAL_MODIFICATION(eblk);
    *dest_xptr = p;
    SEQ_BLK_HDR(eblk)->cursor += sizeof(xptr);
}
Example #21
0
bool nid_parse(const xptr nid, xptr * prefix, shft * size) {
    CHECKP(nid);

    const t_nid * tnid = (t_nid *) XADDR(nid);
    const unsigned char sz = tnid->size;

    if (sz == 0) {
        *size = *(shft*) ((tnid->prefix) + sizeof(xptr));
        *prefix = pstrderef(checkp(*(xptr*) (tnid->prefix)));
        return true;
    } else {
        *prefix = nid;
        *size = sz;
        return false;
    }
}
Example #22
0
void xptr_sequence::set(const xptr& p, int pos)
{
    if (pos < SEQ_NUMBER_OF_XPTRS_IN_MEMORY)
    {
        mem_xptrs[pos] = p;
        return;
    }

    int b_ind = (pos - SEQ_NUMBER_OF_XPTRS_IN_MEMORY) / XPTRS_IN_BLOCK;
    int o_ind = (pos - SEQ_NUMBER_OF_XPTRS_IN_MEMORY) % XPTRS_IN_BLOCK;
    xptr pp = blk_arr[b_ind] + sizeof(seq_blk_hdr) + o_ind * sizeof(xptr);

    CHECKP(pp);
    VMM_SIGNAL_MODIFICATION(pp);
    *(xptr*)(XADDR(pp)) = p;
}
Example #23
0
void PPFnResolveQName::do_next(xqp_tuple &t)
{
    if (first_time)
    {
        child_qname.op->next(t);
        if (t.is_eos())
            return;

        first_time = false;
        tuple_cell qname_tc = atomize(child_qname.get(t));

        if (!is_string_type(qname_tc.get_atomic_type())) {
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong first argument of fn:resolve-QName function");
        }

        child_qname.op->next(t);
        if (!(t.is_eos())) {
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong first argument of fn:resolve-QName function");
        }

        qname_tc = tuple_cell::make_sure_light_atomic(qname_tc);

        child_elem.op->next(t);
        if (t.is_eos() || !child_elem.get(t).is_node()) {
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong second argument of fn:resolve-QName function");
        }

        xptr node = child_elem.get(t).get_node();

        child_elem.op->next(t);
        if (!(t.is_eos())) {
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong second argument of fn:resolve-QName function");
        }

        CHECKP(node);
        if (getNodeType(node) != element)
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong second argument of fn:resolve-QName function");

        scoped_ptr<InscopeNamespaceMap> inscopeNamespaces = new InscopeNamespaceMap(node, cxt->get_static_context()->getStaticallyKnownNamespaces());
        t.copy(tuple_cell::atomic(xsd::QName::createResolve(qname_tc.get_str_mem(), inscopeNamespaces.get())));
    }
    else
    {
        first_time = true;
        t.set_eos();
    }
}
Example #24
0
int main(void)
{
  const char *filedir = "dirfile";
  int error, r = 0;
  DIRFILE *D;
  const char **fl;

  rmdirfile();
  D = gd_open(filedir, GD_RDONLY);
  fl = gd_strings(D);
  error = gd_error(D);
  gd_close(D);

  CHECKP(fl);
  CHECKI(error,GD_E_BAD_DIRFILE);
  return r;
}
Example #25
0
void PPFnInScopePrefixes::do_next (xqp_tuple &t)
{
    if (pos < 0)
    {
        child.op->next(t);

        if (t.is_eos())
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:in-scope-prefixes function");

        if (!child.get(t).is_node())
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:in-scope-prefixes function");

        xptr node = child.get(t).get_node();

        child.op->next(t);
        if (!(t.is_eos()))
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:in-scope-prefixes function");

        CHECKP(node);
        if (getNodeType(node) != element)
            throw XQUERY_EXCEPTION2(XPTY0004, "Wrong argument of fn:in-scope-prefixes function");

        namespaces = new InscopeNamespaceIterator(node, cxt->get_static_context()->getStaticallyKnownNamespaces());

        pos = 0;
    }

    if (namespaces->next())
    {
        xmlns_ptr ns = namespaces->get();

        if (ns->has_prefix())
            t.copy(tuple_cell::atomic_deep(xs_NCName, ns->prefix));
        else
            t.copy(EMPTY_STRING_TC);
    }
    else
    {
        t.set_eos();
        pos = -1;

        delete namespaces;
        namespaces = NULL;
    }
}
Example #26
0
int main(void)
{
  const char *filedir = "dirfile";
  int error, r = 0;
  DIRFILE *D;
  const void *fl;

  rmdirfile();
  D = gd_open(filedir, GD_RDONLY);
  fl = gd_mconstants(D, "parent", GD_UINT8);
  error = gd_error(D);
  gd_close(D);

  CHECKP(fl);
  CHECKI(error, GD_E_BAD_DIRFILE);

  return r;
}
Example #27
0
int main(void)
{
  const char *filedir = "dirfile";
  int error, r = 0;
  DIRFILE *D;
  const char **fl;

  rmdirfile();
  D = gd_open(filedir, GD_RDONLY);
  fl = gd_field_list_by_type(D, GD_STRING_ENTRY);
  error = gd_error(D);
  gd_close(D);

  CHECKP(fl);
  CHECKI(error, GD_E_BAD_DIRFILE);

  return r;
}
Example #28
0
void test_db_after_rcv()
{
    std::string rcv_fname = std::string(SEDNA_DATA) + std::string("/data/") + std::string(tr_globals::db_name) + std::string("_files/rcv_test_result.log");
    metadata_cell_cptr mdc = XNULL;

    logfile = fopen(rcv_fname.c_str(), "at");
    fprintf(logfile, "---------------------------------------------------------------------\n");

    bt_cursor cursor = bt_lm(catalog_get_names(catobj_metadata));
    if (!cursor.is_null()) do
    {
        mdc = cursor.bt_next_obj();

        if (!mdc->is_document())
            test_collection(mdc->get_name(), mdc->get_schema_node());
        else
        {
            xptr blk = mdc->get_schema_node()->bblk;
            CHECKP(blk);
            xptr doc_dsc = getFirstBlockNode(blk);
            test_document(mdc->get_name(), doc_dsc, false);
            test_indexes(doc_schema_node_cptr(mdc->get_schema_node())->full_index_list->first);
        }
    }
    while(cursor.bt_next_key());

    fclose(logfile);

#ifdef RCV_TEST_CRASH
    rcv_fname = std::string(SEDNA_DATA) + std::string("/data/") + std::string(tr_globals::db_name) + std::string("_files");

    if (isRcvOK)
        rcv_fname += std::string("/rcv_ok");
    else
        rcv_fname += std::string("/rcv_failed");

    r_fh = uCreateFile(rcv_fname.c_str(), U_SHARE_READ | U_SHARE_WRITE, U_READ_WRITE, U_NO_BUFFERING, NULL, NULL);
    if (r_fh == U_INVALID_FD)
        fprintf(stderr, "Cannot create rcv result file\n");
    uCloseFile(r_fh, NULL);
#endif
}
Example #29
0
// receive the command as a length prefixed block
// (uint16_t, followed by data)
// this is all over a local socket, won't be doing
// endian flipping, clients should only be local procs
// compiled for the same arch
int handle_connection(int sock) {
  int error = 0;
  rackmond_connection_state state = CONN_WAITING_LENGTH;
  char bodybuf[1024];
  uint16_t expected_len = 0;
  struct pollfd pfd;
  int recvret = 0;
  pfd.fd = sock;
  pfd.events = POLLIN | POLLERR | POLLHUP;
  // if you don't do anything for a whole second we bail
next:
  CHECKP(poll, poll(&pfd, 1, 1000));
  if (pfd.revents & (POLLERR | POLLHUP)) {
    goto cleanup;
  }
  switch(state) {
    case CONN_WAITING_LENGTH:
    recvret = recv(sock, &expected_len, 2, MSG_DONTWAIT);
    if (recvret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
      goto next;
    }
    if (expected_len == 0 || expected_len > sizeof(bodybuf)) {
      // bad length; bail
      goto cleanup;
    }
    state = CONN_WAITING_BODY;
    goto next;
    break;
    case CONN_WAITING_BODY:
    recvret = recv(sock, &bodybuf, expected_len, MSG_DONTWAIT);
    if (recvret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
      goto next;
    }
    CHECK(do_command(sock, (rackmond_command*) bodybuf));
  }
cleanup:
  close(sock);
  if (error != 0) {
    fprintf(stderr, "Warning: possible error handling user connection (%d)\n", error);
  }
  return 0;
}
Example #30
0
xptr apply_before_replace_triggers(xptr new_node, xptr old_node, schema_node_cptr scm_node)
{
   	if (tr_globals::internal_auth_switch == BLOCK_AUTH_CHECK) return old_node;

	CHECKP(old_node);
    xptr parent= nodeGetParent(old_node);

   	t_triggers_set treated_triggers;
    trigger_cell_cptr trc = XNULL;
    while(true)
    {
        trc = find_trigger_for_node(scm_node, TRIGGER_REPLACE_EVENT, TRIGGER_BEFORE, TRIGGER_FOR_EACH_NODE, &treated_triggers);
        if(!trc.found())
            return new_node;
        new_node = trc->execute_trigger_action(new_node, old_node, parent);
		if(new_node==XNULL) return XNULL;
        treated_triggers.insert(trc.ptr());
    }

	return new_node;
}