tinybird-toolset 2.4.10__tar.gz → 2.4.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. {tinybird_toolset-2.4.10/src/tinybird_toolset.egg-info → tinybird_toolset-2.4.13}/PKG-INFO +1 -1
  2. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/conf.py +34 -5
  3. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/setup.py +1 -1
  4. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13/src/tinybird_toolset.egg-info}/PKG-INFO +1 -1
  5. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_convert_to_row_binary.py +37 -0
  6. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_replace_tables_backward_compat.py +5 -3
  7. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/LICENSE +0 -0
  8. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/MANIFEST.in +0 -0
  9. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/README.md +0 -0
  10. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/setup.cfg +0 -0
  11. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/src/chtoolset/__init__.py +0 -0
  12. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/src/chtoolset/query.py +0 -0
  13. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/src/tinybird_toolset.egg-info/SOURCES.txt +0 -0
  14. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/src/tinybird_toolset.egg-info/dependency_links.txt +0 -0
  15. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/src/tinybird_toolset.egg-info/requires.txt +0 -0
  16. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/src/tinybird_toolset.egg-info/top_level.txt +0 -0
  17. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_check_compatible_types.py +0 -0
  18. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_check_write_query.py +0 -0
  19. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_chquery.py +0 -0
  20. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_explain_ast.py +0 -0
  21. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_get_columns_from_create_query.py +0 -0
  22. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_get_left_table.py +0 -0
  23. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_internal_cache.py +0 -0
  24. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_normalize_query_keep_names.py +0 -0
  25. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_normalize_table_column.py +0 -0
  26. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_parse_create_materialized_view_target_table.py +0 -0
  27. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_replace_tables.py +0 -0
  28. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_rewrite_aggregation_states.py +0 -0
  29. {tinybird_toolset-2.4.10 → tinybird_toolset-2.4.13}/tests/test_tables.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tinybird-toolset
3
- Version: 2.4.10
3
+ Version: 2.4.13
4
4
  Home-page: https://gitlab.com/tinybird/clickhouse-toolset
5
5
  Author: Tinybird.co
6
6
  Author-email: support@tinybird.co
@@ -32,6 +32,24 @@ MSAN_ENABLED = bool(os.environ.get('MSAN_ENABLED', '')) # MemorySanitizer
32
32
  TSAN_ENABLED = bool(os.environ.get('TSAN_ENABLED', '')) # ThreadSanitizer
33
33
  THINLTO_FLAG = '-flto=thin'
34
34
 
35
+ # Taken from https://github.com/cpp-best-practices/cmake_template/blob/a3971f5b45/cmake/CompilerWarnings.cmake
36
+ CLANG_WARNINGS = [
37
+ '-Wall',
38
+ '-Wextra',
39
+ '-Wshadow',
40
+ '-Wnon-virtual-dtor',
41
+ '-Wold-style-cast',
42
+ '-Wcast-align',
43
+ '-Wunused',
44
+ '-Woverloaded-virtual',
45
+ '-Wpedantic',
46
+ '-Wconversion',
47
+ '-Wnull-dereference',
48
+ '-Wdouble-promotion',
49
+ '-Wformat=2',
50
+ '-Wimplicit-fallthrough',
51
+ ]
52
+
35
53
 
36
54
  def apply_patch(patch_path):
37
55
  if OMIT_PATCHES:
@@ -276,10 +294,13 @@ class CustomBuildWithFromCH(build_ext):
276
294
  def cflags():
277
295
  cflags_list = CustomBuildWithFromCH.ninja_extractor_other('FLAGS')
278
296
  include_list = list(map(transform_path, CustomBuildWithFromCH.ninja_extractor_other('INCLUDES')))
279
- # Reduce the noise coming from python since those flags are added later as -I and not -isystem
280
- other_list = ['-Wno-reserved-identifier', '-Wno-zero-as-null-pointer-constant', '-Wno-old-style-cast',
281
- '-Wno-cast-function-type', '-Wno-unused-function', '-Wno-redundant-decls',
282
- '-Wno-missing-include-dirs']
297
+ # Replace -I with -isystem: these are external headers and we don't want to see warnings from them
298
+ include_list = [flag.replace('-I', '-isystem', 1) if flag.startswith('-I') else flag for flag in include_list]
299
+ # Remove -W flags, set our own warnings
300
+ cflags_list = [flag for flag in cflags_list if not flag.startswith('-W')]
301
+ other_list = CLANG_WARNINGS.copy()
302
+ other_list += ['-Werror'] # Treat warnings as errors
303
+
283
304
  if BUILD_FOR_VALGRIND:
284
305
  other_list += ['-g', '-gdwarf-4']
285
306
  elif DEBUG_SYMBOLS:
@@ -332,6 +353,10 @@ class CustomBuildWithFromCH(build_ext):
332
353
 
333
354
  # Remove -Wl,--no-undefined since Python symbols will undefined
334
355
  link_flags = filter(lambda flag: flag.find('--no-undefined') == -1, link_flags)
356
+ if sys.platform == 'darwin':
357
+ # -undefined dynamic_lookup (added in extra_libs) already permits all undefined
358
+ # symbols, so an explicit -Wl,-U,<symbol> is redundant and makes ld emit a warning.
359
+ link_flags = filter(lambda flag: not flag.startswith('-Wl,-U,'), link_flags)
335
360
  return " ".join(link_flags)
336
361
 
337
362
  @staticmethod
@@ -384,7 +409,11 @@ class CustomBuildWithFromCH(build_ext):
384
409
  linker = getattr(self.compiler, "linker_so_cxx")
385
410
  linker = [COMPILER_CC] + split_quoted(self.ldflags()) + linker[1:]
386
411
 
387
- compiler += ['-isystem', TOOLSET_PATH]
412
+ compiler += ['-I', TOOLSET_PATH]
413
+ # Make include_dirs (Python headers; set by setuptools) to -isystem: prevents warnings from Python headers
414
+ for d in self.include_dirs or []:
415
+ compiler += ['-isystem', d]
416
+ self.include_dirs = []
388
417
 
389
418
  self.compiler.set_executable("compiler_so", compiler)
390
419
  self.compiler.set_executable("compiler_so_cxx", compiler)
@@ -1,7 +1,7 @@
1
1
  from setuptools import setup, Extension
2
2
 
3
3
  NAME = 'tinybird-toolset'
4
- VERSION = '2.4.10'
4
+ VERSION = '2.4.13'
5
5
 
6
6
  try:
7
7
  from conf import *
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tinybird-toolset
3
- Version: 2.4.10
3
+ Version: 2.4.13
4
4
  Home-page: https://gitlab.com/tinybird/clickhouse-toolset
5
5
  Author: Tinybird.co
6
6
  Author-email: support@tinybird.co
@@ -5134,6 +5134,43 @@ TEST_CASES = [
5134
5134
  b'\x00\x00L-100000000000000000000000000000000000000000000000000000000000000000000000000\x00\x01\x1dInvalid decimal string format\x00\x01\x05value\x01\x01',
5135
5135
  0, 1),
5136
5136
 
5137
+ # Booleans imported into Decimal must produce EXACTLY 1.0 and 0.0, without precision loss
5138
+ (ConversionMode.ONLY_LEGACY,
5139
+ [('t', 'Decimal32(4)', '$.t', False), ('f', 'Decimal32(4)', '$.f', False)],
5140
+ '{"t":true,"f":false}',
5141
+ b'\x00\x10\x27\x00\x00\x00\x00\x00\x00\x00',
5142
+ b'',
5143
+ 1, 0),
5144
+
5145
+ (ConversionMode.ONLY_LEGACY,
5146
+ [('t', 'Decimal64(8)', '$.t', False), ('f', 'Decimal64(8)', '$.f', False)],
5147
+ '{"t":true,"f":false}',
5148
+ b'\x00\x00\xe1\xf5\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
5149
+ b'',
5150
+ 1, 0),
5151
+
5152
+ (ConversionMode.ONLY_LEGACY,
5153
+ [('t', 'Decimal128(30)', '$.t', False), ('f', 'Decimal128(30)', '$.f', False)],
5154
+ '{"t":true,"f":false}',
5155
+ b'\x00\x00\x00\x00\x40\xea\xed\x74\x46\xd0\x9c\x2c\x9f\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
5156
+ b'',
5157
+ 1, 0),
5158
+
5159
+ (ConversionMode.ONLY_LEGACY,
5160
+ [('t', 'Decimal256(50)', '$.t', False), ('f', 'Decimal256(50)', '$.f', False)],
5161
+ '{"t":true,"f":false}',
5162
+ b'\x00\x00\x00\x00\x00\x00\x00\x64\xb5\xfd\x34\x05\xc4\xd2\x87\x66\x92\xf9\x15\x3b\x6c\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
5163
+ b'',
5164
+ 1, 0),
5165
+
5166
+ # Non-legacy mode rejects booleans imported into Decimal columns: the row is quarantined.
5167
+ (ConversionMode.ONLY_NONLEGACY,
5168
+ [('value', 'Decimal128(30)', '$.value', False)],
5169
+ '{"value": true}',
5170
+ b'',
5171
+ b"\x00\x00\x04true\x00\x01XInvalid value true for type 'Decimal(38, 30)' in column 'value' with jsonpath '$.value'.\x00\x01\x05value\x01\x01",
5172
+ 0, 1),
5173
+
5137
5174
  (ConversionMode.ALWAYS,
5138
5175
  [('value', 'FixedString(6)', '$.value', False)],
5139
5176
  '{}',
@@ -370,14 +370,16 @@ def _log_cases(cases):
370
370
 
371
371
  def _results_match(baseline, target, function_name=None):
372
372
  # Allow specific functions to transition from blocked to allowed
373
- ALLOWED_UNBLOCKS = {"getSetting"}
373
+ ALLOWED_UNBLOCKS = {"getSetting", "hasAllTokens", "hasAnyTokens", "hasPhrase"}
374
374
 
375
375
  if baseline.get("ok") != target.get("ok"):
376
376
  # Check if this is an allowed unblock (was blocked, now allowed)
377
377
  is_unblock = (not baseline.get("ok") and target.get("ok"))
378
378
  is_allowed = function_name in ALLOWED_UNBLOCKS
379
- is_restriction = "is restricted" in baseline.get("error_message", "")
380
- if is_unblock and is_allowed and is_restriction:
379
+ # Blocked via deny list ("is restricted") or absent from allowlist ("Unknown function ...").
380
+ baseline_error = baseline.get("error_message", "")
381
+ is_block = "is restricted" in baseline_error or "Unknown function" in baseline_error
382
+ if is_unblock and is_allowed and is_block:
381
383
  return True # This is an expected breaking change
382
384
  return False
383
385
  if baseline.get("ok"):