query_language
Selects objects by their metadata
Applicability
Product |
Command type |
---|---|
VersionVault |
general information |
Platform |
---|
UNIX® |
Linux® |
Windows® |
Synopsis
- Query primitives:
- query-function (arg-list)
attribute-type-name comparison-operator value
- Compound queries:
- query && query
query || query ! query ( query )
Description
The query language is used to formulate queries on VOBs. It includes logical operators similar to those in the C programming language. A query searches one or more VOBs and returns the names of objects, such as versions, branches, and elements. A query may return a single object, many objects, or no objects at all.
A query primitive evaluates to TRUE or FALSE. A TRUE value selects an object, such as an element, branch, or version; a FALSE value excludes it.
A query must be enclosed in quotes if it includes spaces. You may also need to enclose a query in quotes to prevent shell-level interpretation of characters such as ( (open parenthesis). Quoting parentheses in config specs is not required.
Queries in version selectors
You can use a query in a version selector in these contexts:
- Command-line options in
the following cleartool commands:
describe, merge, mkattr, mkbranch, mklabel, rmattr, rmlabel, rmver
- Configuration rules; see the config_spec reference page
- Version-extended pathnames in VersionVault commands; see the pathnames_ccase reference page
A query in a version selector must be enclosed in braces ( {} ).
When a query is applied to a single branch, VersionVault selects the most recent version on that branch that satisfies the query. For example:
cmd-context describe -ver '/main/{attype(QAed)}' util.c
Using a query without a branch pathname causes an element's entire version tree to be searched. If the query returns a single version, the version-selection operation succeeds; the operation fails if the query returns no version (not found) or returns more than one version (ambiguous). For example:
cmd-context describe -ver "{attype(QAed)}" util.c
cleartool: Error: Ambiguous query: "{attype(QAed)}"
Queries in the find and findmerge commands
You can also use queries in the find and findmerge commands. In this context, the query can be enclosed in braces ({...}). The query returns the names of all matching objects. For example:
- UNIX® and Linux®:
cleartool find util.c -ver attype(QAed) -print
util.c@@/main/1
util.c@@/main/3 - Windows® (notice
the quotes):
cleartool find util.c -ver "attype(QAed)" -print
util.c@@\main\1
util.c@@\main\3
Query primitives
The query language includes these primitives:
attribute-type-name comparison-operator value
comparison-operator is one of the following:
== != < <= > >=
Examples:
BugNum==4053
BugNum>=4000
Status!="tested"
This primitive is TRUE if the object itself has an attribute of that type and the value comparison is true. To test whether an object or its subobjects has a particular attribute (for example, an element or its branches and versions), use the attr_sub primitive.
- attr_sub (attribute-type-name, comparison-operator, value)
-
With elements
TRUE if the element or any of its branches or versions has an attribute of type attribute-type-name that satisfies the specified comparison with value.
With branches
TRUE if the branch or any of its versions has an attribute of type attribute-type-name that satisfies the specified comparison with value.
With versions
TRUE if the version itself has an attribute of type attribute-type-name that satisfies the specified comparison with value.
- attype (attribute-type-name)
-
With elements
TRUE if the element itself has an attribute of type attribute-type-name.
With branches
TRUE if the branch itself has an attribute of type attribute-type-name.
With versions
TRUE if the version itself has an attribute of type attribute-type-name.
- attype_sub (attribute-type-name)
-
With elements
TRUE if the element or any of its branches or versions has an attribute of type attribute-type-name.
With branches
TRUE if the branch or any of its versions has an attribute of type attribute-type-name.
With versions
TRUE if the version itself has an attribute of type attribute-type-name.
- brtype (branch-type-name)
-
With elements
TRUE if the element has a branch named branch-type-name.
With branches
TRUE if the branch is named branch-type-name.
With versions
TRUE if the version is on a branch named branch-type-name.
- created_by (login-name)
- In all cases, TRUE if the object was created by the user login-name (as shown by the describe command).
- created_since (date-time)
- In all cases, TRUE if the object
was created since date-time. The date-time argument
can be input in ISO 8601 format or in any of the following formats:
date.time | date | time |now where:
date
:=
day-of-week | long-date
time
:=
h[h]:m[m][:s[s]] [UTC [ [ + | - ]h[h][:m[m] ] ] ]
day-of-week
:=
today |yesterday |Sunday | ... |Saturday |Sun | ... |Sat
long-date
:=
d[d]–month[–[yy]yy]
month
:=
January |... |December |Jan |... |Dec
Specify the time in 24-hour format, relative to the local time zone. If you omit the time, the default value is 00:00:00. If you omit the date, the default is today. If you omit the century, year, or a specific date, the most recent one is used. Specify UTC if you want to resolve the time to the same moment in time regardless of time zone. Use the plus (+) or minus (-) operator to specify a positive or negative offset to the UTC time. If you specify UTC without hour or minute offsets, Greenwich Mean Time (GMT) is used. (Dates before January 1, 1970 Universal Coordinated Time (UTC) are invalid.)
Regardless of input format, date and time values are output in ISO 8601 format.
- eltype (element-type-name)
- In all cases, TRUE if the element to which the object belongs is of type element-type-name.
- hltype (hlink-type-name), hltype (hlink-type-name, ->), hltype (hlink-type-name ,<-)
- In all cases, TRUE if the object is either end of a hyperlink (first form) named hlink-type-name, or is the from-end of a hyperlink (second form), or is the to-end of a hyperlink (third form)
- lbtype (label-type-name)
- In all cases, TRUE if the object itself is labeled label-type-name. (Because elements and branches cannot have labels, this primitive can be true only for versions.)
- lbtype_sub (label-type-name)
-
With elements
TRUE if the element has a version that is labeled label-type-name.
With branches
TRUE if the branch has a version that is labeled label-type-name.
With versions
TRUE if the version itself is labeled label-type-name.
- merge (from-location , to-location)
- In all cases, TRUE if the element to which the object belongs has a merge hyperlink (default name: Merge) connecting the from-location and to-location. You can specify either or both locations with a branch pathname or a version selector. Specifying a branch produces TRUE if the merge hyperlink involves any version on that branch. The branch pathname must be complete (for example, /main/rel2_bugfix, not rel2_bugfix).
- pool (pool-name)
- In all cases, TRUE if the element to which the object belongs has a source pool or cleartext pool named pool-name.
- trtype (trigger-type-name)
- In all cases, TRUE if the element to which the object belongs has an attached or inherited trigger named trigger-type-name.
- version (version-selector)
-
With elements
TRUE if the element has a version with the specified version-selector.
With branches
TRUE if the branch has a version with the specified version-selector.
With versions
TRUE if the version itself has the specified version-selector.
Note that in this context, version-selector cannot itself contain a query. For example, version(REL1) is valid, but version(lbtype(REL1)) is not.
Compound queries
Primitives can be combined into expressions with logical operators. An expression can take any of these forms, where query is a primitive or another expression:
- Logical OR: query||query
- Logical AND: query&&query
- Logical NOT: !query
- Grouping to override precedence: (query)
Operator precedence
The precedence and associativity of the operators for attribute comparisons and formation of logical expressions are the same as in the C programming language:
- Highest precedence: ! (right associative)
- Lower precedence: < <= > >= (left associative)
- Lower precedence: == != (left associative)
- Lower precedence: && (left associative)
- Lowest precedence: || (left associative)
Examples
The UNIX system and Linux examples in this section are written for use in csh. If you use another shell, you may need to use different quoting and escaping conventions.
The Windows examples that include wildcards or quoting are written for use in cleartool interactive mode. If you use cleartool single-command mode, you may need to change the wildcards and quoting to make your command interpreter process the command appropriately.
In cleartool single-command mode, cmd-context represents the UNIX system and Linux shells or Windows command interpreter prompt, followed by the cleartool command. In cleartool interactive mode, cmd-context represents the interactive cleartool prompt.
- On a UNIX® or Linux® system, display all versions of
test.c for which the attribute QAed has the value Yes.
% cat ‘cleartool describe –s –ver /main'{QAed=="Yes"}' test.c‘
- Attach the label REL6 to
the version of test.c that is already labeled REL5.
UNIX® and Linux®:
% cleartool mklabel -ver '{lbtype(REL5)}' REL6 test.c
Created label "REL6" on "test.c" version "/main/4".Windows®:
Z:\vob2\src> cleartool mklabel -ver "{lbtype(REL5)}" REL6 test.c
Created label "REL6" on "test.c" version "\main\4". - Attach an attribute to the
latest version of test.c created since yesterday
at 1 P.M. by user asd. Note the use of backslashes (\) to escape
quote characters (") required to specify a string argument to mkattr.
UNIX® and Linux®:
% mkattr -ver '{created_since(yesterday.13:00)&&created_by(asd)}' \
QAed \"No\" test.c
Created attribute "QAed" on "test.c@@/main/5".Windows®:
cleartool> mkattr -ver "{created_since(yesterday.13:00)&&created_by(asd)}" QAed \"No\" test.c Created attribute "QAed" on "test.c@@\main\5".
- List each branch named rel2_bugfix that
occurs in an element to which a trigger named mail_all has
been attached.
UNIX® and Linux®:
% cleartool find . -branch 'brtype(rel2_bugfix)&&trtype(mail_all)' \
-print ./util.c@@/main/rel2_bugfixWindows®:
Z:\vob2\src> cleartool find . ^
-branch "brtype(rel2_bugfix)&&trtype(mail_all)" ^
-print .\util.c@@\main\rel2_bugfix