285 Commits

Author SHA1 Message Date
Nik Everett
74ae8e3373 SQL: Replace Node's reflection with explicit code (elastic/x-pack-elasticsearch#3490)
This isn't pretty but it removes our need to compile with parameter
names in the debug symbols and the use of reflection during tree
transforms. `instanceof` is still used. It does so by forcing all
subclasses of `Node` to implement two methods like this:

```
    @Override
    protected NodeInfo<PercentileRank, Expression> info() {
        return info(this, PercentileRank::new, field(), value());
    }

    @Override
    protected Expression replaceChildren(List<Expression> newChildren) {
        if (newChildren.size() != 2) {
            throw new IllegalArgumentException("Expected [2] children but got [" + newChildren.size() + "]");
        }
        return new PercentileRank(location(), newChildren.get(0), newChildren.get(1));
    }
```

Every. Single. One.

This is tedious and painful and you have to do each one perfectly,
but it *is* checked by the compiler so it is less scary then the reflection
based approach it is replacing. Marginally. It is still pretty terrifying because
it requires so many tiny changes. While the compiler *does* check that
you've made all the right methods it doesn't check that you've implemented
them correctly.

Technically relates elastic/x-pack-elasticsearch#2871 but doesn't really close the "OO all the things" spirit
of elastic/x-pack-elasticsearch#2871.

A change like this deserves a million tests. Instead, I've created a hacky
reflection based test that attempts to verify that all subclasses of `Node`
implement these method correctly for some test verifiable definition of
"correct".

Original commit: elastic/x-pack-elasticsearch@a69ab634f4
2018-01-17 12:49:47 -05:00
Igor Motov
c3b82e5ee1 SQL: Remove test-utils project (elastic/x-pack-elasticsearch#3583)
Makes Sql Translate Action consistent with other SQL Actions and removes test-utils project

Follow up for elastic/x-pack-elasticsearch#3543

Original commit: elastic/x-pack-elasticsearch@8ff2148d67
2018-01-17 12:18:25 -05:00
Costin Leau
78b0cec4ad Add missing SHAs
Original commit: elastic/x-pack-elasticsearch@7f11371304
2018-01-17 16:55:12 +02:00
Costin Leau
9ef4089f89 SQL: Upgrade to Joda 2.9.9 (sync with master)
Original commit: elastic/x-pack-elasticsearch@d8e641cb71
2018-01-17 16:42:42 +02:00
Costin Leau
dcb71af151 Retrofit Like to be foldable but LikePattern not
Original commit: elastic/x-pack-elasticsearch@0438482def
2018-01-17 15:16:21 +02:00
Costin Leau
a80e5b73c9 Fix Like/RLike signature
Original commit: elastic/x-pack-elasticsearch@8ac7c17b39
2018-01-17 14:44:58 +02:00
Lee Hinman
f53a19374b SQL: Wrap coercion in JdbcResultSet to throw SQLException (elastic/x-pack-elasticsearch#3559)
* SQL: Wrap coercion in JdbcResultSet to throw SQLException

This catches the `ClassCastException` that could be thrown when retrieving data
from a result set, instead converting it into a `SQLException`.

Resolves elastic/x-pack-elasticsearch#3207

* Add simple test for incorrect coercion

Original commit: elastic/x-pack-elasticsearch@5480a48d95
2018-01-16 14:39:20 -07:00
Costin Leau
ab14aa7059 SQL: add folding to BinaryComparison (elastic/x-pack-elasticsearch#3529)
* SQL: add folding to BinaryComparison

Add missing folding to predicates and logical operators
relates elastic/x-pack-elasticsearch#3528

Original commit: elastic/x-pack-elasticsearch@4a7d3765e5
2018-01-16 23:26:30 +02:00
Igor Motov
9401569195 SQL: Adapt to compile and runtime Java home distinction
Relates elastic/x-pack-elasticsearch#3477

Original commit: elastic/x-pack-elasticsearch@5791617988
2018-01-16 14:53:49 -05:00
Igor Motov
12d4f10faa SQL: Switch JDBC to REST protocol (elastic/x-pack-elasticsearch#3543)
Replaces binary serialization protocol in JDBC driver with the common REST protocol.

relates elastic/x-pack-elasticsearch#3419

Original commit: elastic/x-pack-elasticsearch@532c106658
2018-01-16 13:26:06 -05:00
Nik Everett
ebbb49da18 SQL: fix compilation after merging master
New version of lucene and new dependency `elasticsearch-core`.

Original commit: elastic/x-pack-elasticsearch@95b940bd42
2018-01-16 11:52:39 -05:00
Costin Leau
e91269e022 Use the CLI annotation instead of the one from elasticsearch-lib
Original commit: elastic/x-pack-elasticsearch@47cf533ee6
2018-01-16 17:24:42 +02:00
Costin Leau
7d3c6a778f SQL: update support for nested docs (elastic/x-pack-elasticsearch#3546)
* SQL: update support for nested docs

Expand sample data with nested docs
Optimize source generation for nested parents
Nested objects fields are specified in inner-hits and don't need to be
specified at the top-level query. Further more disable parent source if
not needed.
ComputingFieldRef needs to return the hitName of its wrapped children
otherwise nested values cannot be extracted
Disable GROUP BY/HAVING on nested fields
Update FieldAttribute requirements in the random tests

Original commit: elastic/x-pack-elasticsearch@e44951b5f6
2018-01-16 16:59:22 +02:00
Nik Everett
c4474f8574 SQL: Remove empty interface (elastic/x-pack-elasticsearch#3564)
After some recent changes this interface is now empty.

Original commit: elastic/x-pack-elasticsearch@4a44812f78
2018-01-14 10:32:31 -05:00
Igor Motov
9170183e70 SQL: Rename :core to :server in sql gradle files
Related to elastic/elasticsearch#28180

Original commit: elastic/x-pack-elasticsearch@375f437580
2018-01-11 14:29:35 -05:00
Igor Motov
c6f216a3f7 SQL: Use core's jna version
Relates to elastic/elasticsearch#28172

Original commit: elastic/x-pack-elasticsearch@f58fc39c14
2018-01-11 12:09:57 -05:00
Costin Leau
e5e5583bd8 SQL: equality on analyzed through TermQuery on not-analyzed (elastic/x-pack-elasticsearch#3524)
Always use term equality for analyzed terms by falling back (to possible
not present) to the not-analyzed field.
Add clarifying comment in test

Original commit: elastic/x-pack-elasticsearch@9e735d3fef
2018-01-11 00:01:30 +02:00
Costin Leau
2870312320 SQL: Optimizer tests (elastic/x-pack-elasticsearch#3518)
Unit tests for the Optimizer
Disabled for now RemoveDuplicateFunctions until elastic/x-pack-elasticsearch#3527 gets resolved

Original commit: elastic/x-pack-elasticsearch@3224e3937f
2018-01-10 19:42:15 +02:00
Costin Leau
c204cc0aa3 SQL: removed fallback to exact prediction in the parser (elastic/x-pack-elasticsearch#3522)
The grammar definition should not require the exact prediction on the
listener. Falling back to it hides potential ambiguities.
Moved it to a separate method so it can be enabled for debugging in
development similar to Painless picky mode.

Original commit: elastic/x-pack-elasticsearch@969cb0b5cb
2018-01-10 17:52:35 +02:00
Igor Motov
ce81a34467 SQL: Add jdbc mode to REST API (elastic/x-pack-elasticsearch#3499)
Adds a mode parameter to all SQL-related requests. The mode parameter is used for license checks as well as to define the response content. For now only two modes are supported plain (default) and jdbc. We will add other modes in the future as we add more clients.

Relates elastic/x-pack-elasticsearch#3419 

Original commit: elastic/x-pack-elasticsearch@b49ca38d4b
2018-01-10 09:41:36 -05:00
Lee Hinman
0865063740 SQL: Fix multi-line CLI commands to join correctly (elastic/x-pack-elasticsearch#3516)
Previously multi-line CLI SQL statements were joined, but the space command was
missing, so a command like:

```
sql> SHOW
   | functions;
```

Would incorrectly parse as "showfunctions" and throw an error.

This fixes the behavior and adds a test for multi-line commands.

Resolves elastic/x-pack-elasticsearch#3410

Original commit: elastic/x-pack-elasticsearch@3870924ccd
2018-01-09 16:55:30 -07:00
Costin Leau
8257d8d76a SQL: Extend grammar to allow wildcard in the grammar without quotes (elastic/x-pack-elasticsearch#3501)
Tweak the grammar to differentiate between table and normal identifier.
The table one allows wildcard while the normal one (for fields) does not.

Original commit: elastic/x-pack-elasticsearch@a714e950db
2018-01-09 19:30:50 +02:00
Nik Everett
260e5ae6cf SQL: OOify field collection and depth calculation (elastic/x-pack-elasticsearch#3465)
Converts the collection of fields and the calculation of depth for `ProcessorDefinition`s
to OO style tree traversal without the need for `Node` or `instanceof` tests.
  

Original commit: elastic/x-pack-elasticsearch@5d0517af29
2018-01-09 12:24:29 -05:00
Nik Everett
530c0f3dcb SQL: Import for javdoc
I suppose I should have retested this before pushing an update and then
merging....

Original commit: elastic/x-pack-elasticsearch@7e11e67f77
2018-01-09 11:33:29 -05:00
Nik Everett
4d6b58495d SQL: Simplify expression ID generation (elastic/x-pack-elasticsearch#3466)
Replaces the `ExpressionIdGenerator` class with a static method and drops
the `jvmId` field from the `ExpressionId` altogether because it isn't needed.

We still have the potential to roll over expression ids if the server lives for
a long time but it is quite unlikely and rolling over only matters if we roll
over in the same query. So long as each expression id is unique to a
particular query we're fine.

Original commit: elastic/x-pack-elasticsearch@fe3d7f7216
2018-01-09 11:16:31 -05:00
Nik Everett
4009ba24b6 SQL: Document reference equality requirement
Right now `ProcessorDefinition#resolveAttributes` relies on reference
equality to detect when the rewrite does nothing. At least, all the
nodes rely on this. Maybe this isn't that important, but it is what we
do so we may as well document it.

Original commit: elastic/x-pack-elasticsearch@662372db14
2018-01-09 11:11:56 -05:00
Costin Leau
25a00a3b55 SQL: Check null in processor (elastic/x-pack-elasticsearch#3494)
Make Processors resilient to NULL values
Check null only in functions not constants

Original commit: elastic/x-pack-elasticsearch@dd8bd16d49
2018-01-09 16:18:16 +02:00
Costin Leau
2c1210610c SQL: Preserve DateTime as a type internally (elastic/x-pack-elasticsearch#3493)
Original commit: elastic/x-pack-elasticsearch@1d2f3d1dae
2018-01-08 18:46:16 +02:00
Costin Leau
af33fb847e Fix the rest client
Original commit: elastic/x-pack-elasticsearch@e9aaf05398
2018-01-08 16:39:51 +02:00
Costin Leau
dab50f7b77 SQL: correct index name invocation
Original commit: elastic/x-pack-elasticsearch@cec6dd6dd9
2018-01-08 14:54:18 +02:00
Costin Leau
ba81321d0d SQL: Support aliases and indices pattern (elastic/x-pack-elasticsearch#3438)
Add support for aliases and indices pattern
Enhance ShowTable info to differentiate between aliases and indices
Add regex filtering of index names
Handle security exceptions (in case of no privileges or no matching)

Original commit: elastic/x-pack-elasticsearch@91e3674ca7
2018-01-06 23:08:16 +02:00
Adrien Grand
7b4178aa28 Remove redundant modifier.
Original commit: elastic/x-pack-elasticsearch@26b3539fa6
2018-01-04 18:56:36 +01:00
Adrien Grand
895246d6b1 SQL: Fix simplification of boolean expressions. (elastic/x-pack-elasticsearch#3422)
There is an error in the optimizer that causes expressions that look like
`a OR FALSE` to not be rewritten to `a`.

Original commit: elastic/x-pack-elasticsearch@8d19b77b8b
2018-01-04 15:15:09 +01:00
Igor Motov
f575119a8d SQL: Add list tables and columns methods to the REST API (elastic/x-pack-elasticsearch#3464)
Adds list tables and list columns methods to the REST API. These methods are needed by JDBC and possibly other clients.

Related elastic/x-pack-elasticsearch#3419

Original commit: elastic/x-pack-elasticsearch@eaa384c7c9
2018-01-03 16:40:50 -05:00
Nik Everett
a7728e5caa SQL: wrap remaining long lines (elastic/x-pack-elasticsearch#3458)
Wrap all remaining lines over 140 characters in sql for easier
readability.

Original commit: elastic/x-pack-elasticsearch@e0bc04a049
2018-01-01 13:42:38 -05:00
Nik Everett
1cc64f4ca1 SQL: Break long lines in planner package (elastic/x-pack-elasticsearch#3457)
Break lines longer than 140 characters in the planner package to make
them a bit easier to read and make checkstyle happy. It'll make some
merge conflicts but we should be able to deal with them easilly enough.

Original commit: elastic/x-pack-elasticsearch@de8c116f33
2018-01-01 11:09:28 -05:00
Nik Everett
bc8103e268 SQL: Break long lines in expression package (elastic/x-pack-elasticsearch#3456)
Break lines over 140 characters in the expression package to make them a
bit easier to read and to make checkstyle happy.

Original commit: elastic/x-pack-elasticsearch@89487a79cc
2017-12-30 20:21:51 -05:00
Nik Everett
c52b3350ef SQL: Break long lines in the analyzer package (elastic/x-pack-elasticsearch#3455)
Break lines longer than 140 characters in the analyzer package into
multiple lines so they are easier to read and to appease checkstyle.

Original commit: elastic/x-pack-elasticsearch@74c4c6e4ad
2017-12-30 19:09:55 -05:00
Nik Everett
16f996da92 SQL: Fix long lines in querydsl package (elastic/x-pack-elasticsearch#3454)
Break the lines longer than 140 characters in the querydsl package into
multiple lines to make them easier to read. And to make checkstyle
happy.

Original commit: elastic/x-pack-elasticsearch@cffef88490
2017-12-29 17:59:23 -05:00
Nik Everett
c2527ed0f6 SQL: Break long lines in execution package (elastic/x-pack-elasticsearch#3453)
Fixes lines longer than 140 characters to be shorter.

Original commit: elastic/x-pack-elasticsearch@517ed6cde9
2017-12-29 17:05:25 -05:00
Nik Everett
f7159ce56f SQL: Break long lines in parse tree walker (elastic/x-pack-elasticsearch#3451)
SQL's parse tree visitors had some lines longer than 140 characters.
This break them into multiple lines.

Original commit: elastic/x-pack-elasticsearch@58310b02f8
2017-12-29 16:52:15 -05:00
Nik Everett
f5ff5a94a0 SQL: Fix long lines in function package (elastic/x-pack-elasticsearch#3452)
Adds line breaks in long lines in SQL's function package. Rewrites one
line to use `string + string` style instead of `String.format` style
because that is "more normal" in Elasticsearch.

Original commit: elastic/x-pack-elasticsearch@2f4d0358af
2017-12-29 16:52:08 -05:00
Nik Everett
e45ec84a03 SQL: Fix long lines in tests (elastic/x-pack-elasticsearch#3450)
We had three tests with lines > 140 characters. This reflows those
lines.

Original commit: elastic/x-pack-elasticsearch@71b2e5fa08
2017-12-29 16:51:59 -05:00
Nik Everett
27ee786cb6 SQL: Reflow package-info.java (elastic/x-pack-elasticsearch#3448)
Reflows all the text so it wraps around 75 columns for pleasing reading.
And fixes checkstyle errors for the lines that wrap after 140!

Original commit: elastic/x-pack-elasticsearch@9630c8c32e
2017-12-29 15:26:21 -05:00
Nik Everett
b99c27ba45 SQL: Collapse FunctionRegistry class hierarchy (elastic/x-pack-elasticsearch#3443)
Collapses the interface `FunctionRegistry`, and the classes
`AbstractFunctionRegistry` and `DefaultFunctionRegistry` into a single
class, `FunctionRegistry` and adds some tests for the ctor referencing
behavior inroduced in elastic/x-pack-elasticsearch#3442.

Original commit: elastic/x-pack-elasticsearch@52a697e9b8
2017-12-29 14:59:03 -05:00
Nik Everett
5dcde97fdf SQL: Fix checkstyle in sql/rule package (elastic/x-pack-elasticsearch#3446)
* Replaces long line comment with rewritten javadoc with nice line feeds
* Adds some line breaks in a few log lines

Original commit: elastic/x-pack-elasticsearch@00dc7cc9c8
2017-12-29 14:44:21 -05:00
Nik Everett
92a55df8e6 SQL: Fix checkstyle in VerificationException (elastic/x-pack-elasticsearch#3447)
Rewrite a very long line into a few shorter lines.

Original commit: elastic/x-pack-elasticsearch@72f1f98f65
2017-12-29 14:44:09 -05:00
Nik Everett
5c7395f7fc SQL: Drop unused methods from Rows (elastic/x-pack-elasticsearch#3445)
We may as well not keep unused code around. It violated checkstyle too.

Original commit: elastic/x-pack-elasticsearch@2c77b3df76
2017-12-29 14:43:50 -05:00
Nik Everett
758d16d57f SQL: Drop equals and hashCode from FunctionDefinition (elastic/x-pack-elasticsearch#3444)
They aren't used and they don't look right.

Original commit: elastic/x-pack-elasticsearch@4d07f66f0f
2017-12-29 14:43:15 -05:00
Nik Everett
dbf1fc00ce SQL: Remove reflection from constructing Functions (elastic/x-pack-elasticsearch#3442)
This replaces the marker interfaces and reflection that we once used to
construct functions with method references to constructors. It uses a
few overloaded methods to build the `FunctionDefinition`s from the
method references that adapt the various forms of `Function`
constructors that we have into
`BiFunction<UnresolvedFunction, DateTimeZone, Function>` so that the
compiler can do the complex task of picking the appropriate adapter. It
is good at that sort of thing.

Many of these overloaded functions have `@SuppressWarnings("overloads")`
because they are ambiguous if you wrote one as a lambda without type
parameters. Since we always use constructor references this isn't a
problem.

It does not remove the reflection from function naming or from function
type derivation. This is big enough and these seemed significantly less
fraught.

Original commit: elastic/x-pack-elasticsearch@528d05754b
2017-12-29 12:36:09 -05:00