Code

sysdb.git
9 years agoRenamed CONNECTION_* constants to SDB_CONNECTION_*.
Sebastian Harl [Tue, 11 Nov 2014 17:49:49 +0000 (18:49 +0100)]
Renamed CONNECTION_* constants to SDB_CONNECTION_*.

All public symbols should use the "sdb" prefix.

9 years agodata: Support array + element concatenation.
Sebastian Harl [Mon, 10 Nov 2014 17:40:20 +0000 (18:40 +0100)]
data: Support array + element concatenation.

That is, concatenation may be used to prepend to or append to an array.

9 years agodata: Let strlen() and format() support string/decimal/integer arrays.
Sebastian Harl [Mon, 10 Nov 2014 08:33:36 +0000 (09:33 +0100)]
data: Let strlen() and format() support string/decimal/integer arrays.

9 years agocore: Improved style related to conditionals using many branches.
Sebastian Harl [Sun, 9 Nov 2014 14:39:22 +0000 (15:39 +0100)]
core: Improved style related to conditionals using many branches.

9 years agosysdbql(7): Documented iterator support for arrays.
Sebastian Harl [Sun, 9 Nov 2014 14:09:40 +0000 (15:09 +0100)]
sysdbql(7): Documented iterator support for arrays.

9 years agostore: Avoid unnecessary data copies when "evaluating" constant values.
Sebastian Harl [Sun, 9 Nov 2014 14:05:57 +0000 (15:05 +0100)]
store: Avoid unnecessary data copies when "evaluating" constant values.

9 years agostore: Let array iterators support regex matches as well.
Sebastian Harl [Sun, 9 Nov 2014 13:49:20 +0000 (14:49 +0100)]
store: Let array iterators support regex matches as well.

That is, all operators are supported now.

9 years agostore: Let NREGEX (!~) not match on NULL values.
Sebastian Harl [Sun, 9 Nov 2014 12:47:36 +0000 (13:47 +0100)]
store: Let NREGEX (!~) not match on NULL values.

9 years agoparser_test: Added various ANY/ALL iterator tests; also for arrays.
Sebastian Harl [Sun, 9 Nov 2014 10:49:47 +0000 (11:49 +0100)]
parser_test: Added various ANY/ALL iterator tests; also for arrays.

9 years agodata: Don't treat empty arrays (value = NULL) as NULL.
Sebastian Harl [Sun, 9 Nov 2014 10:48:03 +0000 (11:48 +0100)]
data: Don't treat empty arrays (value = NULL) as NULL.

Treating them as NULL leads to weird behavior when using ANY/ALL iterators.

9 years agostore, frontend: Added support for iterating arrays (using ALL / ANY).
Sebastian Harl [Sun, 9 Nov 2014 09:39:13 +0000 (10:39 +0100)]
store, frontend: Added support for iterating arrays (using ALL / ANY).

Currently, this is limited to the 'backend' field of an object. Also, only
simple statements like 'ANY/ALL <array> <cmp> <value>' are supported by the
store (in contrast to service/metric iterators which support arbitrary
matchers to be applied). Given that matchers are object based, this limitation
should feel natural, though.

9 years agostore.h: Use separate value ranges for object and field types.
Sebastian Harl [Sun, 9 Nov 2014 09:36:07 +0000 (10:36 +0100)]
store.h: Use separate value ranges for object and field types.

This allows to use the same flag to store either object or field types or even
a combination of both.

9 years agostore: Merged implementations of compare matchers.
Sebastian Harl [Sat, 8 Nov 2014 16:06:56 +0000 (17:06 +0100)]
store: Merged implementations of compare matchers.

This allowed to factor out the actual comparison functionality, thus making it
reusable.

9 years agodata: Added sdb_data_array_get().
Sebastian Harl [Sat, 8 Nov 2014 16:00:05 +0000 (17:00 +0100)]
data: Added sdb_data_array_get().

This function retrieves an array element, returning an "alias" to its value.

9 years agosysdbql(7): Updated documentation according to latest language changes.
Sebastian Harl [Fri, 7 Nov 2014 23:27:45 +0000 (00:27 +0100)]
sysdbql(7): Updated documentation according to latest language changes.

Lots of stuff has changed … and it's much better now :-)

9 years agofrontend/grammar: Drop support for the special 'host' field.
Sebastian Harl [Thu, 6 Nov 2014 09:10:06 +0000 (10:10 +0100)]
frontend/grammar: Drop support for the special 'host' field.

The old implementation didn't work when querying services or metrics and for
hosts it's the same as querying the 'name' field.

9 years agofrontend/grammar: Let LOOKUP support all object types.
Sebastian Harl [Wed, 5 Nov 2014 23:50:40 +0000 (00:50 +0100)]
frontend/grammar: Let LOOKUP support all object types.

9 years agofrontend: Let the 'lookup' command support services and metrics.
Sebastian Harl [Wed, 5 Nov 2014 23:47:16 +0000 (00:47 +0100)]
frontend: Let the 'lookup' command support services and metrics.

9 years agostore_lookup: Let the iter operators support services and metrics.
Sebastian Harl [Wed, 5 Nov 2014 23:28:00 +0000 (00:28 +0100)]
store_lookup: Let the iter operators support services and metrics.

9 years agofrontend: Let the analyzer report details about errors.
Sebastian Harl [Wed, 5 Nov 2014 23:20:20 +0000 (00:20 +0100)]
frontend: Let the analyzer report details about errors.

9 years agodata: Add to-string support for array types.
Sebastian Harl [Wed, 5 Nov 2014 23:19:49 +0000 (00:19 +0100)]
data: Add to-string support for array types.

9 years agofrontend: Improved parser error reporting.
Sebastian Harl [Wed, 5 Nov 2014 21:15:15 +0000 (22:15 +0100)]
frontend: Improved parser error reporting.

All error messages are now written to a string buffer, allowing them to be
displayed as part of the main error messages associated with failed commands.

9 years agofrontend/grammar: Added sdb_fe_yyerrorf() helper.
Sebastian Harl [Tue, 4 Nov 2014 22:36:11 +0000 (23:36 +0100)]
frontend/grammar: Added sdb_fe_yyerrorf() helper.

9 years agoutils/error: Added sdb_vlog().
Sebastian Harl [Tue, 4 Nov 2014 22:35:27 +0000 (23:35 +0100)]
utils/error: Added sdb_vlog().

This function is like sdb_log() but accept a va_list.

9 years agofrontend/grammar: Added support for FETCHing all object types.
Sebastian Harl [Tue, 4 Nov 2014 19:16:25 +0000 (20:16 +0100)]
frontend/grammar: Added support for FETCHing all object types.

9 years agofrontend: Let the parser run the analyzer.
Sebastian Harl [Tue, 4 Nov 2014 19:14:32 +0000 (20:14 +0100)]
frontend: Let the parser run the analyzer.

… but only when parsing a full statement. Otherwise, the analyzer is missing
the context for verification.

9 years agoparser_test: Fixed semantically invalid filter statements.
Sebastian Harl [Tue, 4 Nov 2014 19:10:32 +0000 (20:10 +0100)]
parser_test: Fixed semantically invalid filter statements.

These errors are only detected by the analyzer which is not used for the
parser test.

9 years agofrontend/analyzer: Check name parameters for FETCH.
Sebastian Harl [Tue, 4 Nov 2014 07:34:28 +0000 (08:34 +0100)]
frontend/analyzer: Check name parameters for FETCH.

9 years agofrontend: Fixed various size checks.
Sebastian Harl [Tue, 4 Nov 2014 07:30:26 +0000 (08:30 +0100)]
frontend: Fixed various size checks.

9 years agofrontend: Let the 'fetch' command support other types besides hosts.
Sebastian Harl [Tue, 4 Nov 2014 07:26:57 +0000 (08:26 +0100)]
frontend: Let the 'fetch' command support other types besides hosts.

9 years agostore: Added sdb_store_get_child().
Sebastian Harl [Mon, 3 Nov 2014 18:35:34 +0000 (19:35 +0100)]
store: Added sdb_store_get_child().

This function may be used to retrieve a host's child object (service, metric,
attribute) by it's name.

9 years agostore: Removed now unused tojson functions.
Sebastian Harl [Mon, 3 Nov 2014 06:43:20 +0000 (07:43 +0100)]
store: Removed now unused tojson functions.

9 years agofrontend: Let FETCH and LIST use JSON formatters.
Sebastian Harl [Mon, 3 Nov 2014 06:37:57 +0000 (07:37 +0100)]
frontend: Let FETCH and LIST use JSON formatters.

… instead of the old tojson functions.

9 years agofrontend: Let FETCH apply filters to the host as well.
Sebastian Harl [Mon, 3 Nov 2014 06:28:28 +0000 (07:28 +0100)]
frontend: Let FETCH apply filters to the host as well.

9 years agostore: Let JSON formatter know about the to-be-formatted object type.
Sebastian Harl [Sun, 2 Nov 2014 18:04:42 +0000 (19:04 +0100)]
store: Let JSON formatter know about the to-be-formatted object type.

When formatting services or metrics, expect those objects to be emitted on the
highest level and then create the host object for them first (once for a
series of objects belonging to the same host).

9 years agostore: Let the JSON formatter know about arrays at top level.
Sebastian Harl [Sun, 2 Nov 2014 17:02:25 +0000 (18:02 +0100)]
store: Let the JSON formatter know about arrays at top level.

There's no reason to require this to be handled separately.

9 years agot/: Added tests for json_formatter-based JSON generation.
Sebastian Harl [Sun, 2 Nov 2014 16:51:30 +0000 (17:51 +0100)]
t/: Added tests for json_formatter-based JSON generation.

9 years agostore: Record each object's parent.
Sebastian Harl [Sun, 2 Nov 2014 15:22:09 +0000 (16:22 +0100)]
store: Record each object's parent.

9 years agofrontend/query: Use the new JSON formatter to implement LOOKUP.
Sebastian Harl [Fri, 31 Oct 2014 17:53:16 +0000 (18:53 +0100)]
frontend/query: Use the new JSON formatter to implement LOOKUP.

This will allow for more flexiblity.

9 years agostore: Added a generic JSON formatter.
Sebastian Harl [Fri, 31 Oct 2014 17:48:34 +0000 (18:48 +0100)]
store: Added a generic JSON formatter.

It works by consuming single objects of any type (host, service, metric,
attribute) at a time and appending their JSON serialization to a string
buffer. The current position in the object tree is recorded in an internal
state.

A helper function is provided on top of the base formatter which allows to
handle an full object at a time.

9 years agostore: Provide more verbose messages on errors during scanning.
Sebastian Harl [Fri, 31 Oct 2014 16:14:04 +0000 (17:14 +0100)]
store: Provide more verbose messages on errors during scanning.

9 years agostore_lookup_test: Ensure that filters are applied before matchers.
Sebastian Harl [Fri, 31 Oct 2014 16:13:20 +0000 (17:13 +0100)]
store_lookup_test: Ensure that filters are applied before matchers.

9 years agosysdbql(7): Link to the JSON RFC.
Sebastian Harl [Thu, 30 Oct 2014 22:43:36 +0000 (23:43 +0100)]
sysdbql(7): Link to the JSON RFC.

9 years agostore: Let sdb_store_scan() pass on filters to callback functions.
Sebastian Harl [Thu, 30 Oct 2014 22:34:08 +0000 (23:34 +0100)]
store: Let sdb_store_scan() pass on filters to callback functions.

The callback function needs access to the filter anyway, so let's handle this
centrally.

9 years agostore: Use sdb_avltree_lookup() to retrieve attributes.
Sebastian Harl [Wed, 29 Oct 2014 16:41:04 +0000 (17:41 +0100)]
store: Use sdb_avltree_lookup() to retrieve attributes.

… rather than iterating through all attributes. D'oh!

9 years agostore: Let sdb_store_scan() support other object types besides hosts.
Sebastian Harl [Tue, 28 Oct 2014 17:17:35 +0000 (18:17 +0100)]
store: Let sdb_store_scan() support other object types besides hosts.

9 years agostore: Merged sdb_store_iterate() into sdb_store_scan().
Sebastian Harl [Tue, 28 Oct 2014 06:44:33 +0000 (07:44 +0100)]
store: Merged sdb_store_iterate() into sdb_store_scan().

These functions are really the same when using a NULL matcher and filter.

9 years agofrontend: Added basic support for semantic AST analysis.
Sebastian Harl [Mon, 27 Oct 2014 23:08:07 +0000 (00:08 +0100)]
frontend: Added basic support for semantic AST analysis.

For now, the analyzer checks the types of all matcher operands.

9 years agofrontend: Let scanner/parser know about object types and field names.
Sebastian Harl [Sun, 26 Oct 2014 09:10:21 +0000 (10:10 +0100)]
frontend: Let scanner/parser know about object types and field names.

This allows to handle all known objects and fields as part of the grammar
rather than manually parsing them and generating custom error messages.

9 years agofrontend/grammar: Access fields by their name rather than '.<name>'.
Sebastian Harl [Sat, 25 Oct 2014 20:45:32 +0000 (22:45 +0200)]
frontend/grammar: Access fields by their name rather than '.<name>'.

There's no more need for a special and somewhat weird syntax.

9 years agofrontend/grammar: Added support for 'ALL <obj> <cmp> <expr>'.
Sebastian Harl [Sat, 25 Oct 2014 20:22:45 +0000 (22:22 +0200)]
frontend/grammar: Added support for 'ALL <obj> <cmp> <expr>'.

This matches, if all of the specified objects match the specified expression.
ALL also matches on empty object lists.

9 years agostore: Removed unused types.
Sebastian Harl [Sat, 25 Oct 2014 20:10:12 +0000 (22:10 +0200)]
store: Removed unused types.

9 years agostore: Added support for ALL matchers.
Sebastian Harl [Sat, 25 Oct 2014 19:43:28 +0000 (21:43 +0200)]
store: Added support for ALL matchers.

Similar to ANY, this matcher iterators over objects. It matches, if *all* of
those objects match another matcher.

9 years agostore: Don't special case negated matchers in the ANY matcher.
Sebastian Harl [Sat, 25 Oct 2014 19:41:16 +0000 (21:41 +0200)]
store: Don't special case negated matchers in the ANY matcher.

The old behavior no longer makes sense when thinking about matching *any*
object.

9 years agofrontend/grammar: Changed '<obj> <cmp> <expr>' to 'ANY <obj> <cmp> <expr>'.
Sebastian Harl [Sat, 25 Oct 2014 12:31:06 +0000 (14:31 +0200)]
frontend/grammar: Changed '<obj> <cmp> <expr>' to 'ANY <obj> <cmp> <expr>'.

… for services, metrics, and attributes. That is, let this involve less magic
but make it clear that this looks at multiple objects and matches if any of
them match.

9 years agostore: Renamed child-matcher to any-matcher.
Sebastian Harl [Sat, 25 Oct 2014 11:58:58 +0000 (13:58 +0200)]
store: Renamed child-matcher to any-matcher.

It matches if any object of an iterable list matches, so this is a more
appropriate name.

9 years agodata_test: Test various unsupported expressions.
Sebastian Harl [Fri, 24 Oct 2014 18:25:17 +0000 (20:25 +0200)]
data_test: Test various unsupported expressions.

9 years agostore: During lookup use strcmp() only for unknown data-types.
Sebastian Harl [Fri, 24 Oct 2014 16:08:14 +0000 (18:08 +0200)]
store: During lookup use strcmp() only for unknown data-types.

Unknown data-types means that we don't know the type of either one expression
before hand. For example, this is true for attributes given that there is no
schema.

9 years agostore: Record the data-type of an expression.
Sebastian Harl [Fri, 24 Oct 2014 15:59:28 +0000 (17:59 +0200)]
store: Record the data-type of an expression.

9 years agodata: Added sdb_data_expr_type().
Sebastian Harl [Fri, 24 Oct 2014 15:51:03 +0000 (17:51 +0200)]
data: Added sdb_data_expr_type().

This function returns the expected type of the result of an arithmetic
expression based on the operator and input types.

9 years agostore: Removed now unused name-matcher and sdb_store_matcher_parse_cmp().
Sebastian Harl [Thu, 23 Oct 2014 20:12:19 +0000 (22:12 +0200)]
store: Removed now unused name-matcher and sdb_store_matcher_parse_cmp().

9 years agot/: Converted name matcher tests to new style matchers.
Sebastian Harl [Thu, 23 Oct 2014 20:11:08 +0000 (22:11 +0200)]
t/: Converted name matcher tests to new style matchers.

9 years agofrontend/grammar: Implement '<obj> <op> <expr>' using new-style matchers.
Sebastian Harl [Thu, 23 Oct 2014 19:30:00 +0000 (21:30 +0200)]
frontend/grammar: Implement '<obj> <op> <expr>' using new-style matchers.

9 years agostore: Added sdb_store_parse_object_type().
Sebastian Harl [Thu, 23 Oct 2014 19:29:16 +0000 (21:29 +0200)]
store: Added sdb_store_parse_object_type().

This function parses an object type name (singular) and returns the type ID.

9 years agostore: Let sdb_store_parse_object_type_plural support attributes.
Sebastian Harl [Thu, 23 Oct 2014 19:28:15 +0000 (21:28 +0200)]
store: Let sdb_store_parse_object_type_plural support attributes.

However, the parser will not accept attributes in LIST commands as before.
Still, an attribute is considered to be a stored object.

9 years agostore: Let child matchers handle negated operators as before.
Sebastian Harl [Thu, 23 Oct 2014 19:20:50 +0000 (21:20 +0200)]
store: Let child matchers handle negated operators as before.

That is, negated matchers have to match *all* children because a condition
like "service != 'foo'" would match only on hosts which do not have a service
called 'foo'.

9 years agostore: Let child matcher actually match the child.
Sebastian Harl [Thu, 23 Oct 2014 19:01:26 +0000 (21:01 +0200)]
store: Let child matcher actually match the child.

9 years agostore: Fixed a typo in the type check of the child matcher.
Sebastian Harl [Thu, 23 Oct 2014 06:08:21 +0000 (08:08 +0200)]
store: Fixed a typo in the type check of the child matcher.

9 years agostore: Removed unused old sdb_store_attr_matcher().
Sebastian Harl [Thu, 23 Oct 2014 05:27:30 +0000 (07:27 +0200)]
store: Removed unused old sdb_store_attr_matcher().

9 years agostore: Renamed sdb_store_cmp_XX to sdb_store_XX_matcher.
Sebastian Harl [Wed, 22 Oct 2014 09:26:45 +0000 (11:26 +0200)]
store: Renamed sdb_store_cmp_XX to sdb_store_XX_matcher.

… now that these names have become available again.

9 years agostore: Removed unused, old conditional matchers.
Sebastian Harl [Wed, 22 Oct 2014 09:16:05 +0000 (11:16 +0200)]
store: Removed unused, old conditional matchers.

9 years agostore: Removed now unused support for attribute matchers in old code.
Sebastian Harl [Wed, 22 Oct 2014 09:09:30 +0000 (11:09 +0200)]
store: Removed now unused support for attribute matchers in old code.

9 years agot/: Use expression-based matchers for attribute comparison tests.
Sebastian Harl [Wed, 22 Oct 2014 09:08:17 +0000 (11:08 +0200)]
t/: Use expression-based matchers for attribute comparison tests.

9 years agostore: Removed sdb_store_matcher_parse_field_cmp() and sdb_store_obj_cond().
Sebastian Harl [Wed, 22 Oct 2014 08:48:13 +0000 (10:48 +0200)]
store: Removed sdb_store_matcher_parse_field_cmp() and sdb_store_obj_cond().

Those functions have been superseded by the new expression-based matchers.

9 years agot/: Use the new expression-based matchers for various tests.
Sebastian Harl [Wed, 22 Oct 2014 08:46:35 +0000 (10:46 +0200)]
t/: Use the new expression-based matchers for various tests.

9 years agodata: Format NULL as NULL and never quote it.
Sebastian Harl [Tue, 21 Oct 2014 08:02:07 +0000 (10:02 +0200)]
data: Format NULL as NULL and never quote it.

The idea, previously, was to make NULL values easily identifiable in all
messages but the focus really is on the JSON output which supports a real null
value.

9 years agostore: Let NULL values never match a regex.
Sebastian Harl [Tue, 21 Oct 2014 07:56:08 +0000 (09:56 +0200)]
store: Let NULL values never match a regex.

9 years agostore: Removed sdb_store_matcher_tostring().
Sebastian Harl [Tue, 21 Oct 2014 07:50:42 +0000 (09:50 +0200)]
store: Removed sdb_store_matcher_tostring().

This function was mainly used for debugging and more verbose error messages
upon test failures. Given that we have more fine-grained tests now, keeping
the tostring() methods up-to-date is rather annoying but for little benefit.

Instead, we should have a real pretty-printer or similar at some point.

9 years agofrontend/grammar: Unified field and attribute value matchers.
Sebastian Harl [Tue, 21 Oct 2014 07:13:47 +0000 (09:13 +0200)]
frontend/grammar: Unified field and attribute value matchers.

Use generic expressions and the new compare matchers instead.

As a side-effect of this change, not-operators (!=, etc.) no longer match on
NULL values (attribute does not exist). This is intended and should have been
like this in the first place (we've got 'IS NULL' for that purpose). For
example, `attribute['foo'] != 123' did previously match if attribute 'foo' did
not exist but now this is no longer the case.

9 years agostore: Let compare matchers fail if any of the operands is NULL.
Sebastian Harl [Tue, 21 Oct 2014 06:17:17 +0000 (08:17 +0200)]
store: Let compare matchers fail if any of the operands is NULL.

9 years agot/: Let tests use '<expr> IN .backend'.
Sebastian Harl [Tue, 21 Oct 2014 05:57:19 +0000 (07:57 +0200)]
t/: Let tests use '<expr> IN .backend'.

9 years agofrontend/grammar: Added support for the IN operator.
Sebastian Harl [Tue, 21 Oct 2014 05:45:31 +0000 (07:45 +0200)]
frontend/grammar: Added support for the IN operator.

This is a matcher checking if a value is included in an array. It's mostly
meant to be used to match backends at the moment.

9 years agostore: Added sdb_store_in_matcher().
Sebastian Harl [Tue, 21 Oct 2014 05:36:41 +0000 (07:36 +0200)]
store: Added sdb_store_in_matcher().

This function creates a matcher which matches if the right value evaluates to
an array value and the left value is included in that array.

9 years agodata: Added sdb_data_inarray().
Sebastian Harl [Tue, 21 Oct 2014 05:25:37 +0000 (07:25 +0200)]
data: Added sdb_data_inarray().

The function determines whether a value is included in an array.

9 years agostore: Added support for querying the BACKEND field.
Sebastian Harl [Mon, 20 Oct 2014 17:17:53 +0000 (19:17 +0200)]
store: Added support for querying the BACKEND field.

… returning an array of strings.

9 years agodata: Added support for comparing integer, decimal, and string arrays.
Sebastian Harl [Mon, 20 Oct 2014 07:44:16 +0000 (09:44 +0200)]
data: Added support for comparing integer, decimal, and string arrays.

Array comparison works element-by-element, returning how the first non-equal
elements compare to each other.

Added tests for array comparison and concatenation.

9 years agodata_test: Use int64_t instead of int for integer array data.
Sebastian Harl [Mon, 20 Oct 2014 07:43:33 +0000 (09:43 +0200)]
data_test: Use int64_t instead of int for integer array data.

9 years agodata: Fixed length of newly allocated array in concat().
Sebastian Harl [Mon, 20 Oct 2014 07:42:35 +0000 (09:42 +0200)]
data: Fixed length of newly allocated array in concat().

9 years agodata: Added basic support for arrays.
Sebastian Harl [Mon, 20 Oct 2014 06:03:13 +0000 (08:03 +0200)]
data: Added basic support for arrays.

An array may contain elements of one type and it's stored in compact raw form
(as in: not an array of union values but an array of the actual values).
'copy', 'free', and 'concat' operations are currently supported but limited to
integer, decimal, or string element types. ENOTSUP is returned for any other
operations.

9 years agodata_test: Removed unnecessary and possibly misleading checks.
Sebastian Harl [Sun, 19 Oct 2014 21:20:49 +0000 (23:20 +0200)]
data_test: Removed unnecessary and possibly misleading checks.

9 years agodata: Use if-statements rather than switch-statements.
Sebastian Harl [Sun, 19 Oct 2014 20:52:44 +0000 (22:52 +0200)]
data: Use if-statements rather than switch-statements.

9 years agodata: Added sdb_data_sizeof().
Sebastian Harl [Sun, 19 Oct 2014 20:21:45 +0000 (22:21 +0200)]
data: Added sdb_data_sizeof().

This function returns the size of the data-type for a given type.

9 years agostore: Clarify behavior of expr_attrvalue if the attribute does not exist.
Sebastian Harl [Sun, 19 Oct 2014 15:58:46 +0000 (17:58 +0200)]
store: Clarify behavior of expr_attrvalue if the attribute does not exist.

9 years agofrontend/grammar: Fixed parsing of 'attribute[<string>]'.
Sebastian Harl [Sun, 19 Oct 2014 15:24:50 +0000 (17:24 +0200)]
frontend/grammar: Fixed parsing of 'attribute[<string>]'.

That is, don't accept anything besides the string "attribute". Previously,
<anything>[<string>] was accepted as an attribute value.

9 years agofrontend/grammar: Make IS NULL operators available to any expression.
Sebastian Harl [Sun, 19 Oct 2014 14:57:34 +0000 (16:57 +0200)]
frontend/grammar: Make IS NULL operators available to any expression.

9 years agostore: Return NULL if an attribute was not found.
Sebastian Harl [Sun, 19 Oct 2014 12:58:45 +0000 (14:58 +0200)]
store: Return NULL if an attribute was not found.

9 years agodata: Added explicit NULL values.
Sebastian Harl [Sun, 19 Oct 2014 12:56:38 +0000 (14:56 +0200)]
data: Added explicit NULL values.

… and let all expressions involving NULL values to return NULL.

9 years agodata: Let CONCAT return NULL if any of its operands is NULL.
Sebastian Harl [Sun, 19 Oct 2014 12:00:41 +0000 (14:00 +0200)]
data: Let CONCAT return NULL if any of its operands is NULL.

This mimics behavior in SQL and also allows for missing values to be reported
as NULL and propagate that information.

9 years agofrontend/grammar: Use strings to access attribute value: attribute['name'].
Sebastian Harl [Fri, 17 Oct 2014 22:42:43 +0000 (00:42 +0200)]
frontend/grammar: Use strings to access attribute value: attribute['name'].

9 years agostore, frontend: Make IS (NOT) NULL an unary operator on expressions.
Sebastian Harl [Fri, 17 Oct 2014 17:50:34 +0000 (19:50 +0200)]
store, frontend: Make IS (NOT) NULL an unary operator on expressions.

This is more flexible and in-line with all other operators being migrated to
expression-based constructs.