| 
 
		
Creating efficient SQL for a relational expression depends on the left-hand side being a select keyword that can be mapped to SQL AND the right hand side being a constant. The only exception to the rule that the right-hand-side must be a constant are the specific expressions revision == firstandrevision == last.
The left hand side (if it is a select keyword) also drives the datatype of the expression. That is, if the left-hand side refers to an integer attribute, 3DSpace attempts to interpret the right-hand side as an integer; if the left-hand side is a date, it tries to interpret the right-hand side as a date.
When the left-hand side represents a string in the database that is SQL convertible (such as attribute[Synopsis]), SQL is constructed to request the database server to return objects which match the right-hand side. In doing so, the server will treat the database values as literal strings with no wildcards. Wildcard matching only applies to the right-hand side.
However, when the left-hand side represents a string in the database that is not SQL convertible (such as “description, orstate[S].signature[SIG].signer), the system must read the value into memory for each object and do a match. In this case, * and ? within the read values will be treated as wildcards. This is also true in the case where.valueis appended (such asattribute[Synopsis].value), since that makes the clause not SQL convertible.
Only the right-hand side is interpreted to include wildcards (unless you use == or !==).
When used with the Equal and Not Equal operators (==, !=) in the where clause, the system treats the wildcard characters “?” and “*” as literal characters on both
 sides of the expression. Do not use these characters when querying using the Equal or Not Equal operators. On the other hand, MQL interprets “?” and “*” as wildcards when used with the four Match operators and when used in the Type, Name, or Revision fields of the query. For example, if you type the following query:temp query bus * A*B * 
MQL returns all objects that start with A and end with B. However, if you use the equality operator in the where clause, as follows: temp query bus * * * where name == A*B 
MQL looks for the literal A*B as the entire object name rather than treating the * as a wildcard.  |