edmiRemoteSelectAggrElements
EdmiError edmiRemoteSelectAggrElements (SdaiServerContext serverContextId, SdaiAggr aggrId, SdaiVersion version, SdaiString condition, SdaiOptions options, SdaiString attributes, SdaiVoid include_exclude_filter SdaiString orderBy SdaiInteger *index, SdaiInteger *numberOfHits, SdaiQueryResult *queryResult, SdaiString xmlConfigurationName, SdaiString *resultString, SdaiString resultFileName, SdaiInvocationId *edmiInvocationId);
Search in an aggregate in a remote edmModel for elements that match a given condition. The condition may be any legal symbolic Express-X logical expression. A NULL or empty string condition will match all aggregate elements. Each matching aggregate element will be identified by its element index. All the matching elements will generate a row in the <queryResult> argument. The returned query result may contain a single column of element indexes, each identifying an aggregate element that match the logical expression given in the <condition> argument. If the aggregate has instance type elements, the attributes of the instance may be returned in any number of individual columns in the query result table. The index of the first aggregate element to check, and the maximum number of matching element indexes to return, are specified as input arguments to the function. The actual number of matching indexes returned and the index of the last returned matching instance in the instance aggregate will be returned from the function. This makes it possible to query through huge aggregates by means of a loop where each iteration handles a small subset of the total aggregate. See the example below.
The logical expression given in the <condition> argument will be compiled by the EDMexpressXCompiler. The query will be executed by the EDMexpressVM. If the aggregate elements are instances, the <attributes> argument may used to specify which attribute values to return in the query result table. It may contain "dot expressions", Express built-in functions and EDMexpressX xpf built-in functions.
Attributes argument syntax example: "Name sizeof(sdai_model.underlying_schema.entities)" . This example will return two columns for instances of EDM_MODEL type in the SystemRepository.ExpressDataManager model. The two columns are.
- The Name attribute of the EDM_MODEL
- The number of entities in the "underlying schema" of the model.
The column names in the resulting query table will be "name" and "sizeof(sdai_model.underlying_schema.entities)" respectively. Different column names may be specified by using the "->" operator.
Example: if we want the 2nd column to be given the name "entities", we may write the 2nd attribute like this: "sizeof(sdai_model.underlying_schema.entities)->Entities"
Note that the characters white space, comma, and semicolon are all used as delimiters between the attribute "names" in the <attributes> argument, hence none of these characters may be used in the attribute name/attribute expression. The total number of hits will be returned in the <numberOfHits> argument.
Arguments
1 | Type | Name | Comment |
2 | SdaiServerContext | serverContextId | Context identification, from edmiDefineServerContext |
3 | SdaiAggr | aggrId | A numeric aggregateID that uniquely identifies the aggregate of interest in the remote EDMdatabase |
4 | SdaiVersion | version | The version of the edmModel to apply this function call on. The <version> parameter is a numeric sequence number counting from one by increments of one for each new model version that is created. A zero model version number means the current version. |
5 | SdaiString | condition | A logical expression, written in Express-X, that the aggregate elements shall match. References to the element it self is done by the symbol SELF. |
6 | SdaiOptions | options | See the description of available options below. |
7 | SdaiString | attributes | Specification of the title and contents of each column of the returned query result table. The following examples illustrate the syntax. |
8 | SdaiVoid | include_exclude_filter | A zero-terminated buffer of entityIds or a NULL-terminated buffer of string pointers to entity names. |
9 | SdaiString | orderBy | Name of the query result column to use for sorting. The column may be specified with its constructor or by the column title. |
10 | SdaiInteger | index | In: The index of the element in the aggregate to start searching from. The first element in the aggregate is indexed zero. Hence the legal index range is: [ 0 <= index < N ] , where N is the number of elements in the aggregate. |
11 | SdaiInteger | numberOfHits | In: The maximum number of matching aggregate elements to return. |
12 | SdaiQueryResult | queryResult | A variable that will receive the result of the query. |
13 | SdaiString | xmlConfigurationName | The name of the XML configuration to apply to the resulting XML formatted query result when the option XML_FORMAT is used. |
14 | SdaiString | resultString | Variable that will receive the returned XML, HTML or ASCII formatted query result when the option RESULT_IN_STRING is used with one of the options HTML_FORMAT, ASCII_FORMAT or XML_FORMAT. |
15 | SdaiString | resultFileName | The name of the file that will contain the returned XML, HTML or ASCII formatted query result. Only applicable when using the RESULT_IN_FILE option in combination with one of the options HTML_FORMAT, ASCII_FORMAT or XML_FORMAT. |
16 | SdaiInvocationId | edmiInvocationId | Currently not used. |
Return Value
Options
1 | Option | Comment |
2 | ALL_ATTRIBUTES | When the argument <attributes> is NULL or an empty string, all attributes of the instances will be included in the query result. However, if the <attributes> argument is used to add one or more aditional constructed columns or to rename a column in the query result, the return of all the instance attributes will be hindered due to an <attributes> argument that is no longer NULL or an empty string. Use this option to force the including of all instance attributes even when the <attributes> argument is not NULL or an empty string. This option is only applicable on aggregates of instances. |
3 | INCLUDE_CONFIGURATION | Includes the XML Configuration in the generated ISO10303-28 compliant XML formatted query result. This option has no effect unless combined with the option XML_FORMAT. |
4 | INCLUDE_SCHEMA | Includes the underlying meta data in the generated ISO10303-28 compliant XML formatted query result. This option has no effect unless combined with the option XML_FORMAT. |
5 | RESULT_IN_STRING | The resulting table will be returned in a string allocated in heap-memory of the calling application. Use the option RESULT_IN_FILE to write the table to a file. |
6 | EXTRACT_SHALLOW | Use this option to force a shallow XML formatted query result. ISO10303-28 compliant XML Query results are deep by default. No other query result format supported by this function is deep. Hence, this option has no effect unless combined with the option XML_FORMAT. |
7 | TRANSFER_NO_DATA | No query result will be returned from the remote EDMdatabase. Use this option when the number of matching elements is the only information needed or for testing the query syntax before actually performing it. |
8 | ASCENDING | Arrange the query result in ascending order. This option is only applicable when the <orderBy> argument is used. |
9 | DESCENDING | Arrange the query result in descending order. This option is only applicable when the <orderBy> argument is used. |
10 | ONLY_INSTANCE_IDS | Return only a single column with the instanceIds of the matching instances. This option is only applicable on aggregates of instances. |
11 | INCLUDE_INSTANCE_IDS | Prepend all attribute columns in the query result with an instanceId column. This option is only applicable on aggregates of instances. |
12 | INCLUDE_FILTER | Only the aggregate elements of types that are explicitly listed in the <include_exclude_filter> argument will be queried for matching instances. This option is only applicable on aggregates of instances. |
13 | EXCLUDE_FILTER | All the aggregate elements, but those of types that are explicitly listed in the <include_exclude_filter> argument, will be queried for matching instances. This option is only applicable on aggregates of instances. |
14 | RESULT_IN_FILE | The resulting table will be written to a file on the local file system of the calling application. The name of the file must be specified in the <resultFileName> argument. |
15 | EDM_IDENTIFIERS | The instanceIds that uniquely identify the instances in the remote EDMdatabase will be used as xmlIds for identification of the instances within the ISO10303-28 compliant XML formatted query result. This option is only applicable on aggregates of instances. |
16 | FILTER_AS_ENTITY_NAMES | The <include_exclude_filter> argument will be interpreted as a NULL-terminated buffer of entity names. This option is only applicable on aggregates of instances. |
17 | FILTER_AS_ENTITY_IDS | The <include_exclude_filter> argument will be interpreted as a zero-terminated buffer of entityIds. This option is only applicable on aggregates of instances. |
18 | HTML_FORMAT | The query result table will be presented in HTML format in a locally allocated string or in a file on the local file system. See the options RESULT_IN_FILE and RESULT_IN_STRING. |
19 | ASCII_FORMAT | The query result table will be presented in plain ASCII format in a locally allocated string or in a file on the local file system. See the options RESULT_IN_FILE and RESULT_IN_STRING. |
20 | ONLY_ELEMENT_INDEXES | The query result table will contain only one column with the index of all the matching elements. |
21 | OLD_XML_FORMAT | The result of the query will be returned in a simple well formed XML formatted file on the local file system. |
22 | XML_FORMAT | The result of the query will be returned in an ISO10303-28 compliant XML formatted string or in a file on the local file system. |
23 | ZIPPED_FILE | The file given by the argument <resultFileName> will be compressed . This option has no effect unless combined with the option RESULT_IN_FILE. |
24 | IGNORE_EMPTY_COLUMNS | Columns for attributes that do not have defined values for any of the returned instances will be left out of the query result table. |
Example
/* SCHEMA Relations ENTITY person; Name : STRING; Age : INTEGER; Pid : INTEGER; Nick : SET OF STRING; Child : SET OF person; END_ENTITY; END_SCHEMA; */ #define S_BATCHSIZE 10 int i; EdmiError rstat; SdaiInteger nHits, nTot, index; SdaiServerContext myContext; SdaiInstance personId; SdaiAggr aggrId; SdaiQueryResult qexRes; /* Create Server Context */ rstat = edmiDefineServerContext("MyContext", "Johnny", "Supervisor", "cf37ftr", "TCP", "9090", "MyServerHost", NULL, NULL, NULL, NULL, NULL, &myContext); /* Get the id of the person with uniqiue Pid = 16126356667. */ index = 0; nHits = 1; rstat = edmiRemoteSelectInstances(myContext, "DataRepository", "Relations", "Person", "PID = 16126356667", ONLY_INSTANCE_IDS, NULL, NULL, NULL, &index, &nHits, &qexRes, NULL, NULL, NULL, NULL); personId = qexRes->instanceIds[0]; edmiFreeQueryResult(qexRes); /* Get the nick aggregate Id */ rstat = edmiRemoteGetAttrsBN(myContext, personId, 0, 1, NULL, "NICK", sdaiAGGR, &aggrId); /* Get all Nick names with a length. greater than 5. Read them in batches of 10 */ nTot = 0; index = 0; nHits = S_BATCHSIZE; while (nHits = S_BATCHSIZE) { rstat = edmiRemoteSelectAggrElements(myContext, aggrId, 0, "LENGTH(SELF) > 5", 0, NULL, NULL, NULL, &index, &nHits, &qexRes, NULL, NULL, NULL, NULL); /* Print nicknames */ for (i=0;i<nHits;i++) { printf("\nNick Name %d : %s", (nTot+i), ((SdaiString) qexRes->columnDescr[0]->pvalue)[i]); } edmiFreeQueryResult(qexRes); nTot += nHits; ++index; } printf ("\n%d Nicknames found", nTot); . . .
See also
Filter by label
There are no items with the selected labels at this time.