edmiRemoteExecuteQuery

EdmiError edmiRemoteExecuteQuery(SdaiServerContext serverContextId,
                                   SdaiString        remoteRepositoryName, 
                                   SdaiString        remoteModelName, 
                                   SdaiString        remoteQuerySchemaName, 
                                   SdaiString        remoteQueryName, 
                                   SdaiInteger       nFileMappings,
                                   SdaiFileMapping   fileMapping[],
                                   SdaiInteger       options,
                                  SdaiQueryResult   *queryResult,
                                   SdaiString        remoteXmlConfigName, 
                                   SdaiString        resultFileName, 
                                  SdaiInvocationId  *edmiInvocationId,
                                   SdaiInteger        numberOfParameters,
                                  /* For each query parameter:[SdaiPrimitiveType parameterDataType,parametervalue] */
                                    ...); 

Invokes the EDMexpressVM with an EDMquery (also denoted Query Functions) and a list of corresponding input parameters on a data model within a remote EDMdatabase. Query functions are defined in EDMquerySchemas. EDMquerySchemas must be compiled to extend the dictionary model of a data model with one or more Query functions. The function edmiRemoteDefineSchema may be used to compile an EDMquerySchema in a remote EDMdatabase. The memory needed for the returned result of an EDMquery will be implicitly allocated by this function. The result will be returned in an tSdaiQueryResult data structure. See the header file sdai.h for a description of this data structure. Use the function edmiFreeQueryResult to release the locally allocated memory when it is no longer needed. The interactive EDMdebugger within the EDMsupervisor may be used to test and debug any Express or Express-X schemata, including Query functions, executed by the EDMexpressVM. The "expressions logging" feature of EDM offers powerful tracing capabilities for testing and debugging Query functions. Use edmiDefineExpressionsLog to configure this feature.

Arguments


1TypeNameComment
2 SdaiServerContext

serverContextId

Context identification, from edmiDefineServerContext

3 SdaiString

remoteRepositoryName

The name of the repository in the remote EDMdatabase that contains the model for which the Query function is to be run. Repository names are case sensitive.

4 SdaiString

remoteModelName

The name of the model on which to run the query. Model names are case sensitive. The combination of the <remoteRepositoryName> and <remoteModelName> arguments uniquely identifies a model in a remote EDMdatabase.

5 SdaiString

remoteQuerySchemaName

The name of the EDMquerySchema in which the Query function to be run is defined. Query Schema names are case insensitive.

6 SdaiString

remoteQueryName

The name of the Query function to be run. Query Schema names are case insensitive.

7 SdaiInteger

nFileMappings

Currently not used.

8 SdaiFileMapping

fileMapping[]

Currently not used.

9 SdaiInteger

options

See description of available options below.  Options may be joined by using the bitwise OR operator.

10 SdaiQueryResult

queryResult

A variable that will receive the address of a locally allocated tSdaiQueryResult data structure. See the header file sdai.h for a description.

11 SdaiString

remoteXmlConfigName

The name of the defined XML configuration to apply on the XML formatted output from the Query function.

12 SdaiString

resultFileName

The name of the file on the local file system that will receive the XML formatted output from the Query function. This option has no effect unless combined with the option [RESULT_IN_FILE].

13 SdaiInvocationId

edmiInvocationId

Currently not used.

14 SdaiInteger

numberOfParameters

The number of parameters that will be supplied to the Query function in the variable argument list of this function. For each parameter, a <parameterDataType> and a <parameterValue> argument must be supplied.

15 

parameterDataType

The data type of the succeeding argument <parameterValue>. This argument may only take one of the following values:
sdaiINTEGER, sdaiREAL, sdaiBOOLEAN, sdaiLOGICAL, sdaiSTRING, sdaiBINARY, sdaiENUMERATION, sdaiAGGR, sdaiINSTANCE or sdaiSELECT.

16 

parameterValue

The value of the parameter. The arguments <parameterDataType> and <parameterValue> must be supplied in pairs for each of the <numberOfParameters> parameters.

Return Value


Error rendering macro 'excerpt-include' : User 'null' does not have permission to view the page 'US:_r_EDMInterface'.

 

Options


OptionComment

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 additional 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.

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 options [XML_FORMAT] and [RESULT_IN_FILE].

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 options [XML_FORMAT] and [RESULT_IN_FILE].

RESULT_IN_STRING

The resulting table will be returned in a string allocated in heap-memory of the calling application. Use edmiFree to release allocated memory. Use the option [RESULT_IN_FILE] to write the table to a file.

OPEN_MODEL_FOR_WRITE_ACCESS

The model will be opened for write access. This enables manipulation of the model population from query functions.

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].

RESULT_AS_ID

The query result will be returned as an aggregateID when sdaiAGGR is the declared data type of the return value from the Query function. The aggregateID will be returned in the element data.value.aggrValof the returned tSdaiQueryResult data structure.
[RESULT_AS_ID] and [RESULT_AS_ID_CONTENTS] are mutually exclusive. [RESULT_AS_ID] is the default value.

RESULT_AS_ID_CONTENTS

The query result will be returned as a table when sdaiAGGR is the declared data type of the return value from the Query function. The table will consist of a single column with one row for each element in the returned aggregate.
[RESULT_AS_ID] and [RESULT_AS_ID_CONTENTS] are mutually exclusive. [RESULT_AS_ID] is the default value.

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. [RESULT_AS_TABLE] must be activated when [RESULT_IN_FILE] is used with [HTML_FORMAT] or [ASCII_FORMAT].

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.

RESULT_AS_TABLE

The query result will be returned as a table. This option is only applicable for Query functions that return an aggregate of either instances or view instances. The number of elements in the aggregate will be the number of rows in the table and the number of attributes in the actual instance type or view type will be the number of columns in the table.

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].

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].

OLD_XML_FORMAT

The result of the query will be returned in a simple well formed XML formatted file on the local file system.

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.

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].

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


 

 /*
 - -------------------------------------- 
 - File: c:/data/furniture.exp 
 - -------------------------------------- 
 SCHEMA Furniture 
 TYPE tScrewType = ENUMERATION OF (PHILIPS, ALLEN, FLAT); END_TYPE; 
 ENTITY Screw; 
 ID : STRING; 
 TYPE : tScrewType; 
 LEN : REAL; 
 DIA : REAL; 
 END_ENTITY; 
 ENTITY Dining_Table; 
 Name : STRING; 
 Legs : INTEGER; 
 Length : REAL; 
 Width : REAL; 
 Height : REAL; 
 Screws : BAG OF Screw; 
 END_ENTITY; 
 END_SCHEMA; 
  
 - --------------------------------------- 
 - File: c:/data/furniture_query.qex 
 - --------------------------------------- 
 QUERY_SCHEMA Furniture_Query FOR Furniture; 
 GLOBAL 
 DECLARE src INSTANCE OF Furniture;  
 END_GLOBAL; 
  
 VIEW_ENTITY View_Table; 
 Name : STRING; 
 Area : REAL; 
 END_VIEW_ENTITY; 
  
 QUERY_FUNCTION Dining_Table_Area (Area : REAL) : SET OF View_Table; 
 LOCAL 
 result : SET of View_Table; 
 currView : View_Table; 
 table_area : REAL; 
 END_LOCAL; 
 FROM(sdt:src::Dining_Table) 
 WHEN TRUE; 
 BEGIN 
 table_area := sdt.Length*sdt.Width; 
 IF(table_area > Area ) THEN 
 NEW currView; 
 currView.Name := sdt.Name; 
 currView.Area := table_area; 
 result ++ currView; 
 END_IF; 
 END; 
 RETURN(result); 
 END_QUERY_FUNCTION;  
 END_QUERY_SCHEMA; 
 */
 int i, j;
 EdmiError rstat, error;
 SdaiInteger nErr, nWrn;
 SdaiServerContext myContext;
 SdaiQueryResult qexRes;
 /* Define Remote Server Context */
 rstat = edmiDefineServerContext("MyRemoteServerContext",
 "Johnny", "Supervisor", "cf37ftr", 
 "TCP", "9090", "MyServerHost", 
 NULL, NULL, NULL, NULL, NULL, &myContext); 
  
 /* Compile the Express Schema */
 rstat = edmiRemoteDefineSchema(myContext, EXPRESS_SCHEMA_TYPE,
 "c:/data/furniture.exp", "c:/temp/furniture.dia",  
 "Furniture", 0, &nWrn, &nErr, NULL); 
  
 /* Compile the Query Schema */
 rstat = edmiRemoteDefineSchema(myContext, QUERY_SCHEMA_TYPE,
 "c:/data/furniture_query.qex", "c:/temp/furniture_query.dia", 
 "Furniture_Query", 0, &nWrn, &nErr, NULL); 
  
 /* Import the product catalogue from a p21 file
 into the model Products in the DataRepository */ 
 rstat = edmiRemoteReadStepFile(myContext, "DataRepository",
 "Products", NULL, NULL, "c:/data/furniture.stp", 
 "c:/temp/furniture.stp.dia", "Furniture", NULL, 
 0, &nWrn, &nErr, &error, NULL); 
  
 /* Get all dining tables with an area
 greater than 2.0 square meters */ 
 rstat = edmiRemoteExecuteQuery(myContext, "DataRepository",
 "Products", "Furniture_Query", "Dining_Table_Area", 
 0, NULL, RESULT_AS_TABLE | RESULT_AS_ID_CONTENTS,  
 &qexRes, NULL, NULL, NULL, 1, sdaiREAL, 2.0); 
  
 /* Print all matching dining tables */
 printf("\nThe following dining tables was found");
 for (i=0; i<qexRes->rows; i++) {
 for (j=0; j<qexRes->columns; j++) {
 SdaiString _name; 
 SdaiReal _area; 
 if(qexRes->columnDescr[j]->datatype == sdaiSTRING) { 
 _name = ((SdaiString*) qexRes->columnDescr[j]->pvalue)[i]; 
 } else { 
 _area = ((SdaiReal *) qexRes->columnDescr[j]->pvalue)[i]; 
 }  
 printf("\n%s - %f m2", _name, _area); 
 } 
 }
 edmiFreeQueryResult(qexRes);
 . . .

 

See also

Filter by label

There are no items with the selected labels at this time.