Commit Graph

139 Commits (b1b076f6007b29473cc81395523771674960de8d)

Author SHA1 Message Date
Jonathan A. Sternberg 27cd61e22d refactor(query/influxql): modify the transpiler compilation tests to remove skip
The transpiler compilation tests will now not allow skip to be
specified. Instead, it must return an error message that starts with
`unimplemented` and then the reason will be used as the skip message.

This way, it will be easier to identify the failing tests in the
transpiler. In the previous method, it was possible for a test to be
marked as skip, but for the transpiler to return the wrong error message
because the test did not differentiate between an unimplemented error
message and an incorrect error message.
2018-07-06 09:21:41 -05:00
Jonathan A. Sternberg 691fa9ba97 feat(query/influxql): support for windowing
The transpiler now supports basic windowing. The window offsets are not
supported yet at all.

For windowing, we use the window function to split the points, perform
the aggregate/selector operation, and then we put them back into the
same window so they are within the same table as they originally were
located in. This is now reflected in the spec and the code.
2018-07-05 15:34:26 -05:00
Jonathan A. Sternberg adec513306 feat(query/influxql): add additional error details for a few unimplemented errors 2018-07-03 15:37:53 -05:00
Nathaniel Cook b4e68fad98 fix(transpiler): Include function name in error 2018-07-03 13:01:25 -06:00
Jonathan A. Sternberg eee8ad2d21 tests(query/influxql): port over the compiler tests for influxql
The compiler tests from the github.com/influxdata/influxdb/query have
been moved over to the influxql transpiler in platform. The framework
has updated to include a skip option so that all of the tests can be
there, but not all of them have to succeed at the moment. If a test
starts succeeding but is marked as one that should be skipped, it will
also cause an error to prevent us from doing work on the transpiler
without marking the test as something not to skip anymore (so progress
is always made).
2018-07-03 10:58:27 -05:00
Jonathan A. Sternberg 98597551d3 feat(query/influxql): support for group by
The transpiler now supports grouping by tags.
2018-07-03 10:18:03 -05:00
Jonathan A. Sternberg 3aed4b2a3d feat(query/influxql): modify the encoder to allow more flexibility from the transpiler
This extra flexibility makes it easier for the transpiler to generate a
specification since the map step can be focused on only generating the
columns related to fields. In particular, it makes it easier to
implement wildcards for tags because the tags will get passed along with
the partition key.
2018-07-02 13:38:12 -05:00
Jonathan A. Sternberg bcd0545728 fix(query/influxql): have the transpiler use the _time column for the time
The spec says to use the `_time` column for the time in the output, but
we were mapping `r._time` to `time` and using the `time` variable. This
modifies the encoder to use the `_time` column and rename it to `time`
for the column name.
2018-07-02 12:48:15 -05:00
Jonathan A. Sternberg 2cc2f2fe41 fix(query/influxql): transpiler should not panic when a function is used with a non-variable 2018-06-28 13:31:31 -05:00
Jonathan A. Sternberg d62b9d3b28
Merge pull request #119 from influxdata/js-transpiler-options
feat(query/influxql): expose default database and retention policy for transpiler
2018-06-27 12:29:55 -05:00
Nathaniel Cook f128074458 feat(query): Change Encode interface to return bytes written 2018-06-27 10:31:04 -06:00
Jonathan A. Sternberg 2388d95949 feat(query/influxql): expose default database and retention policy for transpiler
The influxql transpiler can now be configured with a default database
and retention policy.
2018-06-27 10:23:37 -05:00
Jonathan A. Sternberg 94db4dc285 fix(query/influxql): fix a broken test that didn't get updated with the bucket change 2018-06-21 09:31:25 -05:00
Jonathan A. Sternberg fad9b30705
Merge pull request #120 from influxdata/js-transpiler-buckets
feat(query/influxql): transpile using buckets instead of the database
2018-06-20 14:47:18 -05:00
Jonathan A. Sternberg a1ccecd873 fix(query/influxql): messed up a transpiler unit test
One of the transpiler unit tests got messed up during a recent PR. This
restores the unit test for conditionals.
2018-06-13 09:47:03 -05:00
Jonathan A. Sternberg e900480bda
Merge pull request #115 from influxdata/js-multiple-statements
feat(query/influxql): support multiple select statements
2018-06-13 09:30:56 -05:00
Nathaniel Cook d1ca38c71f chore(ifql): Rename IFQL to Flux 2018-06-11 09:26:10 -06:00
Jonathan A. Sternberg 86defc1e37 feat(query/influxql): transpile using buckets instead of the database
The transpiler should use a bucket for the `from()` call instead of the
database parameter which will likely be deprecated. The bucket that it
will read data from is `db/rp` and, if the retention policy isn't
specified, `autogen` will be used as the default.
2018-06-11 10:13:11 -05:00
Jonathan A. Sternberg b1ab4e87f6 feat(query/influxql): support multiple select statements 2018-06-08 16:10:50 -05:00
Jonathan A. Sternberg af7c391ec3
Merge pull request #117 from influxdata/js-deterministic-join
fix(query/influxql): ensure the join happens deterministically
2018-06-08 16:01:07 -05:00
Jonathan A. Sternberg 02915cbfde fix(query/influxql): ensure the join happens deterministically
This ensures the tests are not flaky because the output is
deterministic.
2018-06-08 15:56:59 -05:00
Jonathan A. Sternberg 119021dc67 feat(query/influxql): implement filter conditions for tags in the transpiler 2018-06-08 14:18:41 -05:00
Jonathan A. Sternberg 4d31ed4ac9
Merge pull request #106 from influxdata/js-refactor-transpiler
refactor(query/influxql): follow the transpiler readme
2018-06-08 13:32:42 -05:00
Jonathan A. Sternberg 1b31a1150c refactor(query/influxql): follow the transpiler readme
There are a few changes to how the transpiler works. The first is that
the streams are now abstracted behind a `cursor` interface. The
interface keeps track of which AST nodes (like variables or function
calls) are represented by the data inside of the stream and the method
of how to access the underlying data. This makes it easier to make a
generic interface for things like the join and map operations. This also
makes it easier to, in the future, use the same code from the map
operation for a filter so we can implement conditions.

This also follows the transpiler readme's methods and takes advantage of
the updates to the ifql language. This means it will group the relevant
cursors into a cursor group, perform any necessary joins, and allow us
to continue building on this as we flesh out more parts of the
transpiler and the language.

The cursor interface makes it so we no longer have to keep a symbol
table mapping the generated names to the locations because that is all
kept within the incoming cursor rather than as a separate data
structure.

It also splits the transpiler into more files so it is easier to find
the relevant code for each stage of the transpiler.
2018-06-08 13:07:10 -05:00
Adam a795d666fc
feat(query/influxql) transpiler encoding end to end tests working (#103)
Finalized support for testing against JSON, added some tests.  Added colMap to result encoder to make initial tests pass
2018-06-06 12:43:56 -04:00
Jonathan A. Sternberg bd1d77c080
Merge pull request #100 from influxdata/js-update-transpiler-plan
docs(query/influxql): update the transpiler readme
2018-06-05 10:42:02 -05:00
Jonathan A. Sternberg 8b088cdf2d docs(query/influxql): update the transpiler readme
Update the transpiler docs to account for a change in the query
language. A slightly different method is now used with some
clarifications previously existing problems.

The readme is also indexed with a table of contents for easier reading.
2018-06-05 10:30:36 -05:00
Jonathan A. Sternberg ea1809c0bf fix(query/influxql): add group spec back to the transpiler
The latest version of influxdb has fixed whatever was wrong with the
group function so this works properly again.
2018-05-31 11:43:58 -05:00
Jonathan A. Sternberg a44374a0c5 feat(query/influxql): encode influxql json results correctly
This fixes the encoder so that it will encode the response correctly to
a JSON blob using the outputs of the transpiler. The transpiler has also
been modified to pass through the correct values so the map function is
correctly constructed and the aggregate function is also correctly
constructed.

This removes the group function temporarily because it does not seem to
be working.
2018-05-31 11:07:27 -05:00
Jonathan A. Sternberg 911f053dd6 fix(http): keep the http response body open until the result has been read
This modifies the `MultiResultDecoder` interface to accept an
`io.ReadCloser` so the `ResultIterator` can close the `io.Reader`
instead of doing it through a defer call. It then makes it so the
`Cancel()` method will close the reader or the reader will be
automatically closed when `More()` returns false.
2018-05-25 15:03:52 -05:00
Nathaniel Cook 44ea17cab3 feat(query/functions/map): Add mergeKey argument to map
In order to facilitate this change the query.PartitionKey
interface was changed to use the values.Value interface.

Additionally map was previously broken when it needed to repartition.
Tests have been added.
2018-05-25 11:08:31 -06:00
Nathaniel Cook 99f4e4a8b4 fix(query/csv): Encode result iterator errors
This change also adds Name() to the Result interface to allow for
correct MultiResultEncoding.
2018-05-24 16:38:50 -06:00
Jonathan A. Sternberg e18879370b feat(http): perform error handling in the transpiler and the query service
The query service now handles some errors (not all) from the ifqld
service. This way, the transpiler, which uses the query service, can
report when it encounters an error from ifqld.

The transpiler will now correctly return errors in the JSON response.
2018-05-24 17:14:16 -05:00
Jonathan A. Sternberg 174ce83f5d feat(query/influxql): use yield name to specify the statement id
The transpiler will now yield each statement using the statement id so
the result encoder can properly order the results and encode the
statement id. This behavior is now in the transpiler spec.
2018-05-24 16:33:51 -05:00
Nathaniel Cook c8ff490338 chore: Add Makefile 2018-05-22 14:45:23 -06:00
Nathaniel Cook affc7e3976 move types around to avoid cyclic imports 2018-05-21 17:02:42 -06:00
Nathaniel Cook 20345b8701 rewrite imports 2018-05-21 15:20:06 -06:00
Nathaniel Cook c0b01f16f8 update transpiler and influxql encoders 2018-05-19 15:28:37 -06:00
Adam 64e3c840ea Relocated several source files from private repo to here. 2018-05-17 11:35:53 -04:00