Commit Graph

57 Commits

Author SHA1 Message Date
Nikolai Kochetov
06f2fa8433 Add more comments, rename classes, move functions adaptors to separate file. 2019-12-12 17:56:03 +03:00
Nikolai Kochetov
a9f1a2e382 Fix compile errors. 2019-12-12 17:55:36 +03:00
Nikolai Kochetov
a73eb4292b Functions refactor part 1. 2019-12-09 00:06:37 +03:00
Alexander Kazakov
03c7b7ff8d
Prevent from using non-deterministic functions in mutations of replicated tables (#7247)
* Added isDeterministic() to IFunctionBuilder i-face
* A test for non-deterministic mutations
* In MutationsInterpreter::validate() ensure deterministic functions
* Adjusted nondeterministic mutation tests
* Moved around some code in MutationsInterpreter::validate()
* Dropped unnecessary check in findFirstNonDeterministicFuncName()
* Corrections to IFunction{Base,Builder} interface
2019-10-10 17:38:08 +03:00
tavplubix
d73db7f779
Merge pull request #6781 from ClickHouse/merging_values_with_expressions
Merging Values with expressions
2019-10-04 12:51:22 +03:00
Alexander Tokmakov
80e5976d10 fixes after review 2019-10-02 20:51:00 +03:00
Alexander Kuzmenkov
ec2d9a083c Remove excessive includes. 2019-09-30 15:31:14 +03:00
Alexander Tokmakov
8936f854be better checking of types of literals 2019-09-04 19:54:20 +03:00
Alexander Tokmakov
46effbd7f6 Template for functions with constant arguments 2019-09-02 17:33:10 +03:00
Nikolai Kochetov
d4363768e6 Added IFunctonBase::getResultIfAlwaysReturnsConstantAndHasArguments 2019-08-19 20:48:19 +03:00
Nikolai Kochetov
2ef878d7ce Add alwaysReturnsConstant for IFunctionBase. Set alwaysReturnsConstant=true for ignore. 2019-08-15 22:31:43 +03:00
kreuzerkrieg
112fc71276 adding -Wshadow for GCC 2019-08-09 23:58:16 +03:00
proller
1ac09fa721
Split Common/config.h by libs (dbms) (#5715) 2019-06-24 14:17:15 +03:00
zhang2014
3af26ca070 ISSUES-3885 better test & fix isStateful bug 2019-01-30 12:49:00 +08:00
zhang2014
ddbd384f32 ISSUES-3885 mark stateful function & do not optimize their predicate 2019-01-30 12:04:28 +08:00
maiha
6c83beafdd dbms: Fixed misspells in comments 2019-01-23 04:56:53 +09:00
Amos Bird
3cc0829cc1 Function execution with dry runs
This commit prevents stateful functions like rowNumberInAllBlocks from being modified in getHeader() calls.
2018-12-02 19:02:04 +08:00
Nikolai Kochetov
97add69825 Rename WithDictionary to LowCardinality. 2018-09-28 13:44:59 +03:00
alexey-milovidov
2471332dfc
Update IFunction.h 2018-09-26 18:02:56 +03:00
Nikolai Kochetov
d526859011 Added cache for low cardinality function result. [#CLICKHOUSE-3904] 2018-09-25 16:48:52 +03:00
Nikolai Kochetov
36da1f2871 Added IFunction::isDeterministicInScopeOfQuery(). 2018-08-09 13:52:46 +03:00
Nikolai Kochetov
c8457abb1b Made IFunction::isDeterministic and IFunction::isDeterministicInScopeOfQuery are const. Disabled default implementation with dictionary for not isDeterministicInScopeOfQuery functions. 2018-08-08 14:26:18 +03:00
Nikolai Kochetov
3a74ec7c0c Mergred with master 2018-07-20 14:08:54 +03:00
Nikolai Kochetov
bf26fda38d Added canBeExecutedOnDefaultArguments into IFunction. Don't run function on defaults is this flag is true. 2018-07-20 13:19:07 +03:00
Alexey Milovidov
8533011a49 More accurate conversion to Nullable type in function CAST #1322 2018-07-16 03:30:13 +03:00
Nikolai Kochetov
9f591b8d02 Merged with master. 2018-06-26 17:41:29 +03:00
Alexey Milovidov
1c2b024c39 Non significant changes according to clang's -Weverything, part 2 [#CLICKHOUSE-2] 2018-06-03 20:43:56 +03:00
Nikolai Kochetov
937cb2db29 Merged with master. 2018-05-21 14:38:50 +03:00
Nikolai Kochetov
b662dcdd0a added IColumn::select 2018-05-03 13:53:00 +03:00
pyos
27f12eeaa3 Merge branch 'master' of https://github.com/yandex/ClickHouse into llvm-jit 2018-05-01 22:51:37 +03:00
pyos
fb577b1049 Hide the whole JIT API behind #if USE_EMBEDDED_COMPILER
Kind ugly, but at least the conditionals are used consistently now.
2018-04-29 13:48:16 +03:00
pyos
6e05c5ace4 compilePrologue() isn't particularly useful after all.
Basically the only thing it can do that compile() can't is create 'alloca'
instructions, which are only needed to get pointers to stack variables.
Given that dynamically-sized allocations aren't possible with this API,
such pointers are probably completely pointless (heh).
2018-04-28 18:11:23 +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
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
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
df2d2e0b25 Tweak the jit compilation API to be more amenable to lazy computation 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
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
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
Tsarkova Anastasia
12c8014e5c Conditional computations. 2018-04-24 09:16:39 +02:00
Nikolai Kochetov
e9bc071837 default implementation for functions with ColumnWithDictionary arguments 2018-04-17 20:47:27 +03:00
Alexey Zatelepin
610f70fbeb forbid non-deterministic functions in primary and partition keys [#CLICKHOUSE-3455] 2018-02-21 20:54:16 +03:00
alexey-milovidov
c5dd6a9fed
Update IFunction.h 2018-02-09 22:20:18 +03:00
alexey-milovidov
1c308d7d6b
Update IFunction.h 2018-02-09 22:15:40 +03:00
Nikolai Kochetov
733450d1dd added more comments [#CLICKHOUSE-3550] 2018-02-08 20:20:10 +03:00
Nikolai Kochetov
27179b375a removed prerequisites [#CLICKHOUSE-3550] 2018-02-08 20:18:52 +03:00
Nikolai Kochetov
583ff32fe8 changed IFunction 2018-02-08 20:18:15 +03:00
Alexey Milovidov
bdd25b15bd Better [#CLICKHOUSE-2]. 2017-12-01 22:34:51 +03:00
Alexey Milovidov
bfdc108a08 Cleaning old code [#CLICKHOUSE-2]. 2017-07-25 01:44:13 +03:00