Commit Graph

260 Commits

Author SHA1 Message Date
Anton Popov
329c9033a8 fix conversion from const map with nulls 2021-04-09 20:50:10 +03:00
Anton Popov
6a15431be7 Merge remote-tracking branch 'upstream/master' into HEAD 2021-03-25 15:57:35 +03:00
alexey-milovidov
150a2df9df
Merge pull request #22026 from kitaisreal/cast-to-enum-nullable-fix
Cast to enum nullable fix
2021-03-23 23:51:19 +03:00
Maksim Kita
75f5679bf0 Cast to enum nullable fix 2021-03-23 14:58:00 +03:00
Alexey Milovidov
3f67f4f47b Saturation for DateTime 2021-03-15 23:40:33 +03:00
Anton Popov
81ac6382a3 slightly better performance 2021-03-13 21:05:18 +03:00
Anton Popov
bc417cf54a refactoring of serializations 2021-03-09 17:46:52 +03:00
Alexey Milovidov
4e8239e098 Merge branch 'master' into DateTime64_extended_range 2021-03-03 23:43:20 +03:00
Vasily Nemkov
2d03d330bc Extended range of DateTime64 to years 1925 - 2238
The Year 1925 is a starting point because most of the timezones
switched to saner (mostly 15-minutes based) offsets somewhere
during 1924 or before. And that significantly simplifies implementation.

2238 is to simplify arithmetics for sanitizing LUT index access;
there are less than 0x1ffff days from 1925.

* Extended DateLUTImpl internal LUT to 0x1ffff items, some of which
  represent negative (pre-1970) time values.
  As a collateral benefit, Date now correctly supports dates up to 2149
  (instead of 2106).
* Added a new strong typedef ExtendedDayNum, which represents dates
  pre-1970 and post 2149.
* Functions that used to return DayNum now return ExtendedDayNum.
* Refactored DateLUTImpl to untie DayNum from the dual role of being
  a value and an index (due to negative time). Index is now a different
  type LUTIndex with explicit conversion functions from DatNum, time_t,
  and ExtendedDayNum.
* Updated DateLUTImpl to properly support values close to epoch start
  (1970-01-01 00:00), including negative ones.
* Reduced resolution of DateLUTImpl::Values::time_at_offset_change
  to multiple of 15-minutes to allow storing 64-bits of time_t in
  DateLUTImpl::Value while keeping same size.
* Minor performance updates to DateLUTImpl when building month LUT
  by skipping non-start-of-month days.
* Fixed extractTimeZoneFromFunctionArguments to work correctly
  with DateTime64.
* New unit-tests and stateless integration tests for both DateTime
  and DateTime64.
2021-02-24 17:08:35 +02:00
hexiaoting
e123c6ef9d Bug fix: Tuple cast to Map 2021-02-23 18:42:33 +08:00
Azat Khuzhin
521537eed8 Fix DateTime64 from Float 2021-02-21 22:36:40 +03:00
Alexey Milovidov
4085782b05 More gentle exception messages 2021-02-21 15:34:48 +03:00
Azat Khuzhin
46ff7d2ab0 Fix DateTime64 overflows 2021-02-07 02:24:31 +03:00
Azat Khuzhin
c4b5eed4ff Fix DateTime64 initialization (to match DateTime behaviour)
There was no specializations for toDateTime64(<numeric>), and because of
this default decimal conversion was used, however this is not enough for
DateTime/DateTime64 types, since the date may overflow and the proper
check is required (like DateTime has), and this what UBsan found [1]:

    ../src/IO/WriteHelpers.h:812:33: runtime error: index 508 out of bounds for type 'const char [201]' Received signal -3 Received signal Unknown signal (-3)

Backtrace:

    (gdb) bt
    0  LocalDateTime::LocalDateTime (this=0x7fffffff8418, year_=1970, month_=1 '\001', day_=1 '\001', hour_=2 '\002', minute_=0 '\000', second_=254 '\376') at LocalDateTime.h:83
    1  0x00000000138a5edb in DB::writeDateTimeText<(char)45, (char)58, (char)32, (char)46> (datetime64=..., scale=7, buf=..., date_lut=...) at WriteHelpers.h:852
    2  0x0000000019c379b4 in DB::DataTypeDateTime64::serializeText (this=0x7ffff5c4b0d8, column=..., row_num=0, ostr=..., settings=...) at DataTypeDateTime64.cpp:66
    3  0x0000000019d297e4 in DB::IDataType::serializeAsText (this=0x7ffff5c4b0d8, column=..., row_num=0, ostr=..., settings=...) at IDataType.cpp:387

  [1]: https://clickhouse-test-reports.s3.yandex.net/19527/cea8ae162ffbf92e5ed29304ab010704c5d611c8/fuzzer_ubsan/report.html#fail1

Also fix CAST for DateTime64
2021-02-06 13:04:53 +03:00
Azat Khuzhin
0627ba0e36 Fix timezone argument for DateTime64
It should be marked with always const, otherwise it will bail:

    Code: 44, e.displayText() = DB::Exception: Illegal column String of time zone argument of function, must be constant string: While processing toDateTime(-1, 1, 'GMT'), Stack trace (when copying this message, always include the lines below):
2021-02-06 13:04:53 +03:00
Maksim Kita
9db9ce11dc Added functions parseDateTimeBestEffortUSOrZero, parseDateTimeBestEffortUSOrNull 2021-01-27 17:10:06 +03:00
Maksim Kita
d712748304 Function accurateCastOrNull fixed unitialized values for numeric cast 2021-01-22 16:24:51 +03:00
tavplubix
00d240853d
Merge pull request #18718 from zhang2014/fix/ISSUES-7690
ISSUES-7690 try fix nullable string type convert to decimal type
2021-01-11 16:18:56 +03:00
zhang2014
cccafcfc3d try fix build failure 2021-01-08 18:29:51 +08:00
Alexey Milovidov
039edbb724 Don't allow conversion between UUID and numeric types 2021-01-05 01:33:59 +03:00
zhang2014
84ddff92f2 ISSUES-7690 try fix nullable string type convert to decimal type 2021-01-04 20:40:33 +08:00
Anton Popov
721bb60edd fix cast to map from tuple of arrays with unequal sizes 2020-12-25 20:12:47 +03:00
Alexander Tokmakov
c49a6302fa fix, add test 2020-12-24 03:13:53 +03:00
Alexander Tokmakov
317df5f5d2 try fix 'value is too short' when converting from String to Nullable(T) 2020-12-24 00:57:33 +03:00
alexey-milovidov
6fc3ca8b7b
Merge pull request #16724 from kitaisreal/added-function-accurate-cast-or-null
Added function accurateCastOrNull, allow different types inside IN subquery
2020-12-18 00:45:27 +03:00
Maksim Kita
9aaa2f9345 Fixed compilation timeout 2020-12-17 21:32:25 +03:00
Anton Popov
b485b5bd1c minor fixes and comments added 2020-12-16 01:22:21 +03:00
Maksim Kita
4e3cc606e6 Fixed tests 2020-12-15 23:36:45 +03:00
Maksim Kita
51f53ce8e9 Added tryParseDecimal functions 2020-12-15 21:54:16 +03:00
Anton Popov
dd09e1d783 fix type map ser/de to json 2020-12-15 17:34:37 +03:00
Anton Popov
afc2d7099b add conversion from array to map 2020-12-15 01:16:04 +03:00
Maksim Kita
17b43ca721 Fixed tests 2020-12-14 22:12:15 +03:00
Maksim Kita
16a30eb4aa Updated non-finite floating conversion into int 2020-12-14 22:12:15 +03:00
Maksim Kita
0b565b679e Fixed Set execute for columns that cannot be inside Nullable 2020-12-14 22:12:15 +03:00
Maksim Kita
18dc118298 Fixed compile issues 2020-12-14 22:12:15 +03:00
Maksim Kita
0464859cfe Updated usage of different types during IN query
1. Added accurateCast function.
2. Use accurateCast in Set during execute.
3. Added accurateCast tests.
4. Updated select_in_different_types tests.
2020-12-14 22:12:15 +03:00
Maksim Kita
f4b8e8ef99 Allow different types inside IN subquery 2020-12-14 22:12:15 +03:00
Maksim Kita
dd072a20c9 Fixed compile issues 2020-12-14 22:12:15 +03:00
Maksim Kita
4435642e39 Fixed style issues 2020-12-14 22:12:15 +03:00
Maksim Kita
db5d0944ed Added Decimal support 2020-12-14 22:12:15 +03:00
Maksim Kita
baad78d2f2 Fixed setting null value in vector. Updated tests. 2020-12-14 22:12:15 +03:00
Maksim Kita
4cd5025e83 Added numeric limits for UInt128 2020-12-14 22:12:15 +03:00
Maksim Kita
d636e1618b Added function accurate cast or null 2020-12-14 22:12:15 +03:00
Anton Popov
6b09669d66 data type map: several fixes 2020-12-05 22:36:09 +03:00
Anton Popov
12604ce0e6 Merge branch 'dev_map2' of git://github.com/hexiaoting/ClickHouse into merging-map 2020-12-01 14:52:30 +03:00
Azat Khuzhin
ee38cce1bf Fix toUnixTimestamp(Date()) error (use type name not column type name)
Was:
    Code: 44. DB::Exception: Received from localhost:9000. DB::Exception: Illegal column UInt16 of first argument of function toUnixTimestamp: While processing toUnixTimestamp(today()).

Now:
    Code: 44. DB::Exception: Received from localhost:9000. DB::Exception: Illegal type Date of first argument of function toUnixTimestamp: While processing toUnixTimestamp(today()).
2020-11-28 15:05:48 +03:00
hexiaoting
5b3a7f5c98 Merge remote-tracking branch 'origin/master' into dev_map2 2020-11-26 16:43:27 +08:00
Azat Khuzhin
17f6c82ffa Prohibit toUnixTimestamp(Date())
Making it implicitly cast to Date() does not looks correct, since before
it returns somewhat unexpected result:

    SELECT toUnixTimestamp(today())

    ┌─toUnixTimestamp(today())─┐
    │                    18591 │
    └──────────────────────────┘
2020-11-25 00:26:14 +03:00
alexey-milovidov
1663b13215
Merge pull request #17257 from ucasFL/fix
fix toUInt256 stack overflow
2020-11-21 22:54:06 +03:00
fenglv
268b15f221 fix toUInt256 stack overflow 2020-11-21 12:59:40 +00:00
Nikolai Kochetov
cf678b6092 Merge branch 'master' into order-inputs-in-action-dag 2020-11-21 13:54:50 +03:00
Nikolai Kochetov
266596783a Remove Converting transform and step. 2020-11-18 12:45:46 +03:00
Nikolai Kochetov
947a29e378 Remove Converting transform and step. 2020-11-18 12:38:03 +03:00
Nikolai Kochetov
354620b5a1 Remove Converting transform and step. 2020-11-18 12:35:32 +03:00
Ivan Lezhankin
f897f7c93f Refactor IFunction to execute with const arguments 2020-11-17 16:24:45 +03:00
hexiaoting
66bca89001 Style error fix 2020-11-02 17:23:02 +08:00
hexiaoting
3a70cf3773 Merge remote-tracking branch 'origin/master' into dev_map2 2020-11-02 14:46:56 +08:00
hexiaoting
e1ff6c3870 Update codes 2020-11-02 14:46:32 +08:00
hexiaoting
619fe6b10b Merge remote-tracking branch 'hexiaoting/dev_map2' into dev_map2 2020-11-02 14:07:00 +08:00
hexiaoting
2ba68d7494 Add map function 2020-11-02 14:05:53 +08:00
Vasily Nemkov
e0d85ffd1d Allow casting Tuple as Map.
SELECT CAST(([1, 2, 3], ['1', '2', 'foo']), 'Map(UInt8, String)') AS map
2020-10-28 12:41:11 +03:00
Anton Popov
5fbca7d62d
Merge pull request #16337 from kitaisreal/uuid-safe-cast-functions-added
UUID safe cast functions added
2020-10-26 16:03:27 +03:00
Maksim Kita
440ae2bc57 UUID safe cast functions added
1. Added readUUIDTextImpl, readUUIDText, tryReadUUIDText functions in
ReadHelpers.
2. Added toUUIDOrNull, toUUIDOrZero functions based on ReadHelpers read
implementations.
3. Updated documentation.
2020-10-25 11:45:29 +03:00
hexiaoting
483be134b2 Support MergeTree Engine 2020-10-23 16:36:17 +08:00
Nikolai Kochetov
19ccce0305 Fix gcc build. 2020-10-20 18:56:05 +03:00
Nikolai Kochetov
295e612343 Fix build and tests. 2020-10-20 16:11:57 +03:00
Nikolai Kochetov
bc58637ec2 Fixing build. 2020-10-19 21:37:44 +03:00
hexiaoting
fcd35b0619 Merge branch 'master' into dev_map2 2020-10-18 16:18:13 +08:00
Nikolai Kochetov
139487a1a0 Part 1. 2020-10-17 17:23:37 +03:00
Nikolai Kochetov
959424f28a Rename block to columns. 2020-10-14 17:04:50 +03:00
Nikolai Kochetov
966b1d6cf5 Rename Block to ColumnsWithTypeAndName. 2020-10-14 16:09:11 +03:00
hexiaoting
cb9e88efa3 Update with fresh master to build sucessfully. 2020-10-14 15:35:22 +08:00
hexiaoting
cdb4dd57a6 Add new DataType Map(key,value) 2020-10-14 14:35:14 +08:00
Nikolai Kochetov
3a17c2a7ac Rename FunctionArguments to ColumnsWithTypeAndName 2020-10-11 22:20:20 +03:00
Nikolai Kochetov
0df08dcb36 Rename columns() to size(). 2020-10-11 21:11:39 +03:00
Nikolai Kochetov
d28325a353 Replace getByPosition to [] 2020-10-10 21:24:57 +03:00
Nikolai Kochetov
a7fb2e38a5 Use ColumnWithTypeAndName as function argument instead of Block. 2020-10-09 10:41:28 +03:00
Amos Bird
654245af3c
Fix signedness conversion monotonicity 2020-09-14 18:11:40 +08:00
Amos Bird
4c3c1cdaf3
Fix Nullable String to Enum conversion. 2020-09-07 15:32:44 +08:00
alexey-milovidov
adf50fd774
Merge pull request #13761 from zhang2014/improvement/date_time
ISSUES-4006 add precision argument for DateTime type
2020-09-02 05:12:35 +03:00
Artem Zuikov
d304d522cc
Refactoring: rename types to allow change bigint library (#14219) 2020-09-01 12:54:50 +03:00
Artem Zuikov
fe5db661ce fix decimal to float conversion and toDecimal256() 2020-08-26 15:26:12 +03:00
zhang2014
b679b2e30c ISSUES-4006 fix toDateTime64 with scale 0 2020-08-21 13:16:50 +08:00
zhang2014
ec1572d7be ISSUES-4006 support parserDateTime32 functions 2020-08-21 13:09:25 +08:00
zhang2014
45cc0778a0 ISSUES-4006 support scale with parserDateTime 2020-08-20 22:41:13 +08:00
zhang2014
edeb983eb0 ISSUES-4006 some refactor 2020-08-20 19:18:29 +08:00
Artem Zuikov
becc186c91
Add support for extended precision integers and decimals (#13097) 2020-08-19 14:52:17 +03:00
zhang2014
fb1417db71 ISSUES-4006 try fix test failure 2020-08-16 01:08:03 +08:00
zhang2014
43839a97b6 ISSUES-4006 add factor with DateTime type 2020-08-15 21:29:24 +08:00
alexey-milovidov
be38b0fe75
Merge pull request #13497 from amosbird/tdm
Better toDate/toDateTime functions.
2020-08-09 02:14:58 +03:00
Amos Bird
d9de96716a
string to date is not monotonic 2020-08-08 14:30:50 +08:00
Alexey Milovidov
edd89a8610 Fix half of typos 2020-08-08 03:47:03 +03:00
alexey-milovidov
cbe9878e9e
Update FunctionsConversion.h 2020-08-07 22:53:52 +03:00
alexey-milovidov
65b3863a9e
Update FunctionsConversion.h 2020-08-07 22:52:21 +03:00
Amos Bird
9938e1f3f6
Better toDate/toDateTime function. 2020-08-08 03:38:34 +08:00
Azat Khuzhin
4713b59159 Fix CAST(Nullable(String), Enum())
The wrapper that is returned from createStringToEnumWrapper() does not
have access to the ColumnNullable (i.e. original column), because it is
converted to nested type in the prepareRemoveNullable().

So add original ColumnNullable into the block in prepareRemoveNullable()
if source type is Nullable and pass this flag to the
createStringToEnumWrapper() to make it know about that fact that last
column in the block is the original ColumnNullable in this case.

And this one looks most sane.
2020-07-26 12:00:24 +03:00
Nikolai Kochetov
e4689ce302 Make IFunction::executeImpl const. 2020-07-21 16:58:07 +03:00
flynn
5816858403
add parseDateTimeBestEffortUS function (#12028)
* add function parseDateTimeBestEffortUS
* add test
* add doc

Co-authored-by: alexey-milovidov <milovidov@yandex-team.ru>
2020-07-05 21:09:20 +03:00
Alexey Milovidov
1462a66d1e Fix typos 2020-06-27 22:05:00 +03:00
Alexey Milovidov
15272d9e60 Fix style 2020-06-20 20:05:47 +03:00
Alexey Milovidov
4867934204 Every function in its own file 2020-06-20 18:45:50 +03:00
Artem Zuikov
6af36cb703
CAST keep nullable (#11733) 2020-06-18 13:18:28 +03:00
Alexey Milovidov
fae12d5e42 Return NULL or zero when value is not parsed completely in parseDateTimeBestEffortOr* functions 2020-06-14 04:45:03 +03:00
Alexey Milovidov
41bfa8a275 Addition to prev. revision 2020-05-30 19:35:59 +03:00
Alexey Milovidov
326d2f9af8 Fix uninitialized memory in conversion 2020-05-30 19:21:14 +03:00
Vasily Nemkov
403aae9126 Fixed parseDateTime64BestEffort implementation
Fixed argument resolution issues.
Added tests and made sure -orNull and -orZero variants alwo work correctly.
2020-05-21 17:21:39 +03:00
Azat Khuzhin
f29e5c60a5 Add const qualifier for IFunction::isInjective() 2020-04-18 01:50:15 +03:00
Alexey Milovidov
d43903211a Better exception message #9810 2020-04-12 05:51:56 +03:00
Amos Bird
f1cb928737
more monotonicity for toString() 2020-04-08 20:13:44 +08:00
Ivan Lezhankin
06446b4f08 dbms/ → src/ 2020-04-03 18:14:31 +03:00