static c_bool v_partitionAdminRemoveExpression( v_partitionAdmin da, const char *partitionExpr) { c_bool result = FALSE; v_partitionInterest partitionInterest, found; q_expr expr; c_collection q; c_iter list; c_value params[1]; assert(!v_partitionExpressionIsAbsolute(partitionExpr)); expr = (q_expr)q_parse("expression like %0"); params[0] = c_stringValue((char *)partitionExpr); q = c_queryNew(da->partitionInterests, expr, params); q_dispose(expr); list = ospl_c_select(q,0); assert(c_iterLength(list) <= 1); partitionInterest = v_partitionInterest(c_iterTakeFirst(list)); while (partitionInterest) { result = TRUE; found = c_tableRemove(da->partitionInterests, partitionInterest, NULL, NULL); c_free(partitionInterest); c_free(found); partitionInterest = v_partitionInterest(c_iterTakeFirst(list)); } c_free(q); c_iterFree(list); return result; }
void v_entryRemoveGroup( v_entry entry, v_group group) { c_query query; q_expr qExpr; c_value params[2]; c_iter groups; v_proxy proxy, proxy2; v_handle handle; assert(entry != NULL); assert(C_TYPECHECK(entry,v_entry)); assert(group != NULL); assert(C_TYPECHECK(group,v_group)); handle = v_publicHandle(v_public(group)); qExpr = (q_expr)q_parse("source.index = %0 and source.server = %1"); params[0] = c_longValue(handle.index); params[1] = c_addressValue(handle.server); query = c_queryNew(entry->groups, qExpr, params); q_dispose(qExpr); groups = c_select(query, 0); c_free(query); assert(c_iterLength(groups) <= 1); proxy = v_proxy(c_iterTakeFirst(groups)); proxy2 = c_remove(entry->groups, proxy, NULL, NULL); c_iterFree(groups); c_free(proxy); c_free(proxy2); }
c_iter v_resolveMMFGroups( c_set groups, const c_char *partitionExpr, const c_char *topicExpr) { c_collection q; q_expr expr; c_iter list; c_value params[2]; assert(groups != NULL); expr = (q_expr)q_parse("partition.name like %0 and topic.name like %1"); if (expr == NULL) { assert(expr != NULL); return NULL; } params[0] = c_stringValue((c_string)partitionExpr); params[1] = c_stringValue((c_string)topicExpr); q = c_queryNew(groups, expr, params); if (q == NULL) { list = NULL; } else { list = ospl_c_select(q,0); } assert(q != NULL); c_free(q); q_dispose(expr); return list; }
static c_iter v_resolveMMFNameSpaces( d_storeMMFKernel kernel, const c_char *name) { c_iter list; c_collection q; q_expr expr; c_value params[1]; assert(kernel != NULL); assert(C_TYPECHECK(kernel,v_kernel)); expr = (q_expr)q_parse("name like %0"); params[0] = c_stringValue((char *)name); q = c_queryNew(kernel->nameSpaces,expr,params); q_dispose(expr); list = ospl_c_select(q,0); c_free(q); return list; }
c_iter v_resolveTopics( v_kernel kernel, const c_char *name) { c_iter list; c_collection q; q_expr expr; c_value params[1]; assert(kernel != NULL); assert(C_TYPECHECK(kernel,v_kernel)); expr = (q_expr)q_parse("name like %0"); params[0] = c_stringValue((char *)name); q = c_queryNew(kernel->topics,expr,params); q_dispose(expr); c_lockRead(&kernel->lock); list = c_select(q,0); c_lockUnlock(&kernel->lock); c_free(q); return list; }
static c_bool v__partitionAdminRemove( v_partitionAdmin da, const char *partitionName, v_partition *partitionRemoved) { c_bool result; v_partition partition, found; q_expr expr; c_collection q; c_iter list; c_value params[1]; assert(v_partitionExpressionIsAbsolute(partitionName)); expr = (q_expr)q_parse("name like %0"); params[0] = c_stringValue((char *)partitionName); q = c_queryNew(da->partitions, expr, params); q_dispose(expr); list = ospl_c_select(q,0); assert(c_iterLength(list) <= 1); partition = v_partition(c_iterTakeFirst(list)); if (partition) { found = c_tableRemove(da->partitions, partition, NULL, NULL); *partitionRemoved = found; c_free(partition); result = TRUE; } else { *partitionRemoved = NULL; result = FALSE; } c_free(q); c_iterFree(list); return result; }