Commit Graph

15665 Commits

Author SHA1 Message Date
pyos
a1eb938ed2 Inline nullable number constants into compiled code.
Also, protect against some segfaults during compilation by checking
correctness of the type returned by compile().
2018-04-28 17:12:00 +03:00
BayoNet
c3a47815ab Codeblock formatting is fixed 2018-04-28 14:53:59 +03:00
BayoNet
38c0442ee6 Changes in accordance with comments from the developers. 2018-04-28 14:45:37 +03:00
pyos
ccc895d162 Represent nullable types as pairs instead of pointers.
Turns out LLVM has insertvalue & extractvalue for struct in registers. This is
faster than pointers because null checks are now subject to more optimizations.
2018-04-28 14:12:23 +03:00
BayoNet
1b0d7361cc Merge remote-tracking branch 'upstream/master' 2018-04-28 11:13:06 +03:00
BayoNet
7558684e33 Multiple formatting and links fixes. 2018-04-28 10:58:16 +03:00
pyos
5c75342d54 Check nativity of all types *before* calling isCompilable 2018-04-28 01:03:52 +03:00
pyos
979c4d959f Let jit-compilable functions deal with NULLs themselves.
And provide a default implementation of compile() for nullable columns
that actually works and is consistent with execute().
2018-04-28 00:34:27 +03:00
alexey-milovidov
093c054b1f
Merge pull request #2263 from luc1ph3r/arbitrary-csv-delimiter
Support an arbitrary CSV delimiter
2018-04-27 13:13:09 -07:00
alexey-milovidov
96e2dfa790
Update SettingsCommon.h 2018-04-27 13:12:26 -07:00
pyos
49b61cd27d Refactor LLVMFunction to make extending to DataTypeNullable easier 2018-04-27 18:44:38 +03:00
Ivan Zhukov
a9653e5759 Add a test for CSV input and output formatting 2018-04-27 03:49:44 +03:00
Vitaliy Lyudvichenko
b43e02cf4a
Update CHANGELOG_RU.md 2018-04-27 03:05:05 +03:00
Vitaliy Lyudvichenko
03eea193bc
Update CHANGELOG.md 2018-04-27 03:04:39 +03:00
Vitaliy Lyudvichenko
921b3c041d
Added EN changelog for 1.1.54380 version 2018-04-27 00:34:09 +03:00
Vitaliy Lyudvichenko
220398e47c
Update CHANGELOG_RU.md 2018-04-27 00:06:01 +03:00
alexey-milovidov
f5d9123d63
Merge pull request #2296 from proller/fix8
Test: fill CLICKHOUSE_CONFIG from args.configserver
2018-04-26 13:59:35 -07:00
proller
bef63d1dd0 Test: fill CLICKHOUSE_CONFIG from args.configserver 2018-04-26 23:02:10 +03:00
Vitaliy Lyudvichenko
e152f223c9 Fix nodes leak in case of session expiration. [#CLICKHOUSE-2] 2018-04-26 22:46:45 +03:00
Vitaliy Lyudvichenko
ed25e6d634 Fixed tests isolation. [#CLICKHOUSE-2] 2018-04-26 22:46:45 +03:00
pyos
a9e0b6de9f Use system LLVMConfig.cmake with minor tweaks.
Should fix Travis build, finally.
2018-04-26 22:45:39 +03:00
Ivan Zhukov
4094e21be5 Code review 2018-04-26 20:41:43 +03:00
pyos
b4d527ee85 Inline compile-time constants into jitted functions. 2018-04-26 14:30:16 +03:00
pyos
c95f8a669f Throw in untyped versions of IFunction::{isCompilable,compile}
IFunction inherits IFunctionBase for some reason despite not actually knowing
the types, so these two methods make no sense. The versions with DataTypes&
as an argument should be used instead.
2018-04-25 20:07:19 +03:00
pyos
9ae5fe1b6d Minor style fixes 2018-04-25 18:33:58 +03:00
pyos
854f85dd9b Put #if USE_EMBEDDED_COMPILER in ExpressionJIT.{cpp,h} 2018-04-25 18:19:22 +03:00
pyos
d59b0d7ec0 Add IColumn::getRawData to fixed-contiguous columns 2018-04-25 18:16:48 +03:00
pyos
6c275c27d0 Remove an unnoticed debug return 2018-04-25 16:44:24 +03:00
pyos
c419d5a1a5 Poison only columns actually used by ARRAY_JOIN and JOIN 2018-04-25 16:01:06 +03:00
pyos
5482282943 Implement informational methods for LLVMFunction 2018-04-25 16:01:06 +03:00
pyos
af7ecd4c4a Move function compilation before insertion of REMOVE_COLUMNs 2018-04-25 16:01:06 +03:00
pyos
162a0c8b33 Fix some comments' style 2018-04-25 16:01:06 +03:00
pyos
0da110234c Do not compile the jit if USE_EMBEDDED_COMPILER is disabled 2018-04-25 16:01:00 +03:00
Vitaliy Lyudvichenko
0957fd08a6
Update CHANGELOG_RU.md 2018-04-25 15:16:02 +03:00
Vitaliy Lyudvichenko
be10512066
Add RU changelog for v1.1.54380 2018-04-25 15:09:01 +03:00
pyos
1bece1de46 Support nullable columns (with default behavior) in jitted functions 2018-04-25 13:37:26 +03:00
pyos
4bd0906613 Fix some comments 2018-04-25 13:37:26 +03:00
pyos
3789eba5c4 Fix CMakeFiles syntax 2018-04-25 13:37:26 +03:00
pyos
2b1be27b1b Add missing option to CMakeFiles.txt 2018-04-25 13:37:26 +03:00
pyos
df2d2e0b25 Tweak the jit compilation API to be more amenable to lazy computation 2018-04-25 13:37:26 +03:00
pyos
b2077a466a Inline jit-compilable functions into other jit-compilable functions 2018-04-25 13:37:26 +03:00
pyos
3810173103 Remove IFunction::createResultColumn.
Given that the list of supported types is hardcoded in
LLVMContext::Data::toNativeType, this method is redundant because
LLVMPreparedFunction can create a ColumnVector itself.
2018-04-25 13:37:26 +03:00
pyos
6b526f784c Enable the default set of LLVM optimization passes
I honestly can't tell if they work. LLVM has surprisingly bad API documentation.
2018-04-25 13:37:26 +03:00
pyos
8c8a8f9c0f Extend the test jit-compilable function to arbitrary numbers 2018-04-25 13:37:25 +03:00
pyos
5f1bf11ede Implement a loop over the columns in jit-compiled code 2018-04-25 13:37:25 +03:00
pyos
407008a4d9 Separate jit-compilability checks from actual compilation 2018-04-25 13:37:25 +03:00
pyos
e96a5e8344 Implement JIT compilation, without a loop for now.
It actually seems to work, so long as you only have one row that is. E.g.

    > select something(cast(number + 6 as Float64), cast(number + 2 as Float64)) from system.numbers limit 1';
    8

with this IR:

    define void @"something(CAST(plus(number, 6), 'Float64'), CAST(plus(number, 2), 'Float64'))"(void**, i8*, double*) {
    entry:
      %3 = load void*, void** %0
      %4 = bitcast void* %3 to double*
      %5 = load double, double* %4
      %6 = getelementptr void*, void** %0, i32 1
      %7 = load void*, void** %6
      %8 = bitcast void* %7 to double*
      %9 = load double, double* %8
      %10 = fadd double %5, %9
      store double %10, double* %2
      ret void
    }
2018-04-25 13:37:25 +03:00
pyos
b398ffbaba Map all number types to LLVM types.
The example from the previous commit doesn't need a cast to Float64 anymore.
2018-04-25 13:37:25 +03:00
pyos
851684de51 Add a JIT interface for row-wise default-nullable functions.
Not actually implemented, though. It does print out some jit-compiled stuff,
but that's about it. For example, this query:

    select number from system.numbers where something(cast(number as Float64)) == 4

results in this on server's stderr:

    define double @"something(CAST(number, 'Float64'))"(void**, i8*, void*) {
    "something(CAST(number, 'Float64'))":
      ret double 1.234500e+04
    }

(and an exception, because that's what the non-jitted method does.)

As one may notice, this function neither reads the input (first argument;
tuple of arrays) nor writes the output (third argument; array), instead
returning some general nonsense.

In addition, `#if USE_EMBEDDED_COMPILER` doesn't work for some reason,
including LLVM headers requires -Wno-unused-parameter, this probably only
works on LLVM 5.0 due to rampant API instability, and I'm definitely
no expert on CMake. In short, there's still a long way to go.
2018-04-25 13:37:25 +03:00
pyos
27d90fb941 Add an example function that uses LLVM to compile its own body 2018-04-25 13:37:25 +03:00