clickhouse-native 0.0.1

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 (260) hide show
  1. checksums.yaml +7 -0
  2. data/ext/clickhouse_native/client.cpp +847 -0
  3. data/ext/clickhouse_native/extconf.rb +101 -0
  4. data/ext/clickhouse_native/vendor/clickhouse-cpp/.clang-format +11 -0
  5. data/ext/clickhouse_native/vendor/clickhouse-cpp/.git +1 -0
  6. data/ext/clickhouse_native/vendor/clickhouse-cpp/.gitattributes +63 -0
  7. data/ext/clickhouse_native/vendor/clickhouse-cpp/.github/CODEOWNERS +1 -0
  8. data/ext/clickhouse_native/vendor/clickhouse-cpp/.github/workflows/linux.yml +139 -0
  9. data/ext/clickhouse_native/vendor/clickhouse-cpp/.github/workflows/macos.yml +87 -0
  10. data/ext/clickhouse_native/vendor/clickhouse-cpp/.github/workflows/windows_mingw.yml +102 -0
  11. data/ext/clickhouse_native/vendor/clickhouse-cpp/.github/workflows/windows_msvc.yml +74 -0
  12. data/ext/clickhouse_native/vendor/clickhouse-cpp/.gitignore +280 -0
  13. data/ext/clickhouse_native/vendor/clickhouse-cpp/.travis.yml +62 -0
  14. data/ext/clickhouse_native/vendor/clickhouse-cpp/CMakeLists.txt +157 -0
  15. data/ext/clickhouse_native/vendor/clickhouse-cpp/LICENSE +206 -0
  16. data/ext/clickhouse_native/vendor/clickhouse-cpp/README.md +260 -0
  17. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/CMakeLists.txt +246 -0
  18. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/buffer.h +10 -0
  19. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/compressed.cpp +258 -0
  20. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/compressed.h +48 -0
  21. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/endpoints_iterator.cpp +20 -0
  22. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/endpoints_iterator.h +34 -0
  23. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/input.cpp +96 -0
  24. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/input.h +103 -0
  25. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/open_telemetry.h +23 -0
  26. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/output.cpp +119 -0
  27. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/output.h +142 -0
  28. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/platform.cpp +1 -0
  29. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/platform.h +33 -0
  30. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/projected_iterator.h +55 -0
  31. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/singleton.h +11 -0
  32. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/socket.cpp +489 -0
  33. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/socket.h +177 -0
  34. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/sslsocket.cpp +307 -0
  35. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/sslsocket.h +111 -0
  36. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/string_utils.h +28 -0
  37. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/string_view.h +142 -0
  38. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/uuid.h +10 -0
  39. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/wire_format.cpp +177 -0
  40. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/base/wire_format.h +79 -0
  41. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/block.cpp +134 -0
  42. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/block.h +114 -0
  43. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/client.cpp +1269 -0
  44. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/client.h +320 -0
  45. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/array.cpp +175 -0
  46. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/array.h +321 -0
  47. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/column.cpp +24 -0
  48. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/column.h +107 -0
  49. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/date.cpp +365 -0
  50. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/date.h +245 -0
  51. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/decimal.cpp +255 -0
  52. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/decimal.h +50 -0
  53. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/enum.cpp +123 -0
  54. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/enum.h +65 -0
  55. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/factory.cpp +285 -0
  56. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/factory.h +14 -0
  57. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/geo.cpp +108 -0
  58. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/geo.h +79 -0
  59. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/ip4.cpp +117 -0
  60. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/ip4.h +71 -0
  61. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/ip6.cpp +108 -0
  62. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/ip6.h +66 -0
  63. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/itemview.cpp +101 -0
  64. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/itemview.h +86 -0
  65. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/lowcardinality.cpp +527 -0
  66. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/lowcardinality.h +221 -0
  67. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/lowcardinalityadaptor.h +63 -0
  68. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/map.cpp +87 -0
  69. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/map.h +257 -0
  70. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/nothing.h +87 -0
  71. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/nullable.cpp +109 -0
  72. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/nullable.h +153 -0
  73. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/numeric.cpp +126 -0
  74. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/numeric.h +88 -0
  75. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/string.cpp +333 -0
  76. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/string.h +145 -0
  77. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/time.cpp +155 -0
  78. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/time.h +118 -0
  79. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/tuple.cpp +106 -0
  80. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/tuple.h +178 -0
  81. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/utils.h +41 -0
  82. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/uuid.cpp +80 -0
  83. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/columns/uuid.h +58 -0
  84. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/error_codes.h +595 -0
  85. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/exceptions.h +66 -0
  86. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/protocol.h +54 -0
  87. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/query.cpp +25 -0
  88. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/query.h +246 -0
  89. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/server_exception.h +16 -0
  90. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/types/type_parser.cpp +314 -0
  91. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/types/type_parser.h +89 -0
  92. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/types/types.cpp +484 -0
  93. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/types/types.h +397 -0
  94. data/ext/clickhouse_native/vendor/clickhouse-cpp/clickhouse/version.h +14 -0
  95. data/ext/clickhouse_native/vendor/clickhouse-cpp/cmake/Findcityhash.cmake +26 -0
  96. data/ext/clickhouse_native/vendor/clickhouse-cpp/cmake/Findlz4.cmake +39 -0
  97. data/ext/clickhouse_native/vendor/clickhouse-cpp/cmake/Findzstd.cmake +39 -0
  98. data/ext/clickhouse_native/vendor/clickhouse-cpp/cmake/cpp17.cmake +8 -0
  99. data/ext/clickhouse_native/vendor/clickhouse-cpp/cmake/openssl.cmake +8 -0
  100. data/ext/clickhouse_native/vendor/clickhouse-cpp/cmake/subdirs.cmake +5 -0
  101. data/ext/clickhouse_native/vendor/clickhouse-cpp/cmake/version.cmake +87 -0
  102. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/CMakeLists.txt +9 -0
  103. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/base/attributes.h +682 -0
  104. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/base/config.h +714 -0
  105. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/base/internal/bits.h +219 -0
  106. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/base/macros.h +147 -0
  107. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/base/optimization.h +241 -0
  108. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/base/options.h +238 -0
  109. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/base/policy_checks.h +111 -0
  110. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/base/port.h +26 -0
  111. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/numeric/int128.cc +390 -0
  112. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/numeric/int128.h +1092 -0
  113. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/numeric/int128_have_intrinsic.inc +302 -0
  114. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/absl/absl/numeric/int128_no_intrinsic.inc +308 -0
  115. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/cityhash/cityhash/BUCK +13 -0
  116. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/cityhash/cityhash/CMakeLists.txt +7 -0
  117. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/cityhash/cityhash/COPYING +19 -0
  118. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/cityhash/cityhash/city.cc +469 -0
  119. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/cityhash/cityhash/city.h +90 -0
  120. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/cityhash/cityhash/citycrc.h +43 -0
  121. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/cityhash/cityhash/config.h +118 -0
  122. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/BUCK +14 -0
  123. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/CMakeLists.txt +4 -0
  124. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/LICENSE +28 -0
  125. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/README.md +1 -0
  126. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest-death-test.h +346 -0
  127. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest-matchers.h +930 -0
  128. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest-message.h +219 -0
  129. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest-param-test.h +507 -0
  130. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest-printers.h +1029 -0
  131. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest-spi.h +238 -0
  132. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest-test-part.h +184 -0
  133. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest-typed-test.h +329 -0
  134. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest.h +2495 -0
  135. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest_pred_impl.h +359 -0
  136. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/gtest_prod.h +61 -0
  137. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/custom/README.md +56 -0
  138. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/custom/gtest-port.h +37 -0
  139. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/custom/gtest-printers.h +42 -0
  140. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/custom/gtest.h +37 -0
  141. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/gtest-death-test-internal.h +304 -0
  142. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/gtest-filepath.h +211 -0
  143. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/gtest-internal.h +1560 -0
  144. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/gtest-param-util.h +947 -0
  145. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/gtest-port-arch.h +114 -0
  146. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/gtest-port.h +2389 -0
  147. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/gtest-string.h +175 -0
  148. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/include/gtest/internal/gtest-type-util.h +183 -0
  149. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest-all.cc +48 -0
  150. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest-death-test.cc +1644 -0
  151. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest-filepath.cc +369 -0
  152. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest-internal-inl.h +1221 -0
  153. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest-matchers.cc +97 -0
  154. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest-port.cc +1433 -0
  155. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest-printers.cc +533 -0
  156. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest-test-part.cc +108 -0
  157. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest-typed-test.cc +107 -0
  158. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest.cc +6746 -0
  159. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/gtest/src/gtest_main.cc +54 -0
  160. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/lz4/lz4/BUCK +13 -0
  161. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/lz4/lz4/CMakeLists.txt +8 -0
  162. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/lz4/lz4/LICENSE +24 -0
  163. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/lz4/lz4/lz4.c +2402 -0
  164. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/lz4/lz4/lz4.h +764 -0
  165. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/lz4/lz4/lz4hc.c +1554 -0
  166. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/lz4/lz4/lz4hc.h +438 -0
  167. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/BUCK +232 -0
  168. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/CMakeLists.txt +115 -0
  169. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/LICENSE +30 -0
  170. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/allocations.h +55 -0
  171. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/bits.h +200 -0
  172. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/bitstream.h +437 -0
  173. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/compiler.h +358 -0
  174. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/cpu.h +213 -0
  175. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/debug.c +24 -0
  176. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/debug.h +107 -0
  177. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/entropy_common.c +340 -0
  178. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/error_private.c +63 -0
  179. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/error_private.h +159 -0
  180. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/fse.h +639 -0
  181. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/fse_decompress.c +311 -0
  182. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/huf.h +273 -0
  183. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/mem.h +435 -0
  184. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/pool.c +371 -0
  185. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/pool.h +90 -0
  186. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/portability_macros.h +156 -0
  187. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/threading.c +176 -0
  188. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/threading.h +150 -0
  189. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/xxhash.c +24 -0
  190. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/xxhash.h +5686 -0
  191. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/zstd_common.c +48 -0
  192. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/zstd_deps.h +111 -0
  193. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/zstd_internal.h +392 -0
  194. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/common/zstd_trace.h +163 -0
  195. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/clevels.h +134 -0
  196. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/fse_compress.c +624 -0
  197. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/hist.c +181 -0
  198. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/hist.h +75 -0
  199. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/huf_compress.c +1435 -0
  200. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_compress.c +7032 -0
  201. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_compress_internal.h +1532 -0
  202. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_compress_literals.c +235 -0
  203. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_compress_literals.h +39 -0
  204. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_compress_sequences.c +442 -0
  205. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_compress_sequences.h +54 -0
  206. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_compress_superblock.c +577 -0
  207. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_compress_superblock.h +32 -0
  208. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_cwksp.h +742 -0
  209. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_double_fast.c +758 -0
  210. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_double_fast.h +39 -0
  211. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_fast.c +960 -0
  212. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_fast.h +38 -0
  213. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_lazy.c +2157 -0
  214. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_lazy.h +127 -0
  215. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_ldm.c +724 -0
  216. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_ldm.h +117 -0
  217. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_ldm_geartab.h +106 -0
  218. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_opt.c +1472 -0
  219. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstd_opt.h +56 -0
  220. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstdmt_compress.c +1867 -0
  221. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/compress/zstdmt_compress.h +113 -0
  222. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/decompress/huf_decompress.c +1882 -0
  223. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/decompress/huf_decompress_amd64.S +576 -0
  224. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/decompress/zstd_ddict.c +244 -0
  225. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/decompress/zstd_ddict.h +44 -0
  226. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/decompress/zstd_decompress.c +2355 -0
  227. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/decompress/zstd_decompress_block.c +2192 -0
  228. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/decompress/zstd_decompress_block.h +73 -0
  229. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/decompress/zstd_decompress_internal.h +238 -0
  230. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/dictBuilder/cover.c +1257 -0
  231. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/dictBuilder/cover.h +158 -0
  232. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/dictBuilder/divsufsort.c +1913 -0
  233. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/dictBuilder/divsufsort.h +67 -0
  234. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/dictBuilder/fastcover.c +766 -0
  235. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/dictBuilder/zdict.c +1127 -0
  236. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_legacy.h +422 -0
  237. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v01.c +2125 -0
  238. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v01.h +94 -0
  239. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v02.c +3477 -0
  240. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v02.h +93 -0
  241. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v03.c +3117 -0
  242. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v03.h +93 -0
  243. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v04.c +3605 -0
  244. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v04.h +142 -0
  245. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v05.c +4004 -0
  246. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v05.h +162 -0
  247. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v06.c +4113 -0
  248. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v06.h +172 -0
  249. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v07.c +4498 -0
  250. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/legacy/zstd_v07.h +187 -0
  251. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/zdict.h +474 -0
  252. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/zstd.h +3020 -0
  253. data/ext/clickhouse_native/vendor/clickhouse-cpp/contrib/zstd/zstd/zstd_errors.h +114 -0
  254. data/lib/clickhouse_native/clickhouse_native.bundle +0 -0
  255. data/lib/clickhouse_native/client.rb +50 -0
  256. data/lib/clickhouse_native/errors.rb +23 -0
  257. data/lib/clickhouse_native/pool.rb +49 -0
  258. data/lib/clickhouse_native/version.rb +3 -0
  259. data/lib/clickhouse_native.rb +8 -0
  260. metadata +369 -0
@@ -0,0 +1,285 @@
1
+ #include "factory.h"
2
+
3
+ #include "array.h"
4
+ #include "date.h"
5
+ #include "decimal.h"
6
+ #include "enum.h"
7
+ #include "geo.h"
8
+ #include "ip4.h"
9
+ #include "ip6.h"
10
+ #include "lowcardinality.h"
11
+ #include "lowcardinalityadaptor.h"
12
+ #include "map.h"
13
+ #include "nothing.h"
14
+ #include "nullable.h"
15
+ #include "numeric.h"
16
+ #include "string.h"
17
+ #include "./time.h" // `./` avoids possible conflicts with standard C time.h
18
+ #include "tuple.h"
19
+ #include "uuid.h"
20
+
21
+
22
+ #include "../types/type_parser.h"
23
+
24
+ #include "../exceptions.h"
25
+
26
+ #include <stdexcept>
27
+ #include <string>
28
+
29
+ namespace clickhouse {
30
+ namespace {
31
+
32
+ // Like Python's list's []:
33
+ // * 0 - first element
34
+ // * 1 - second element
35
+ // * -1 - last element
36
+ // * -2 - one before last, etc.
37
+ const auto& GetASTChildElement(const TypeAst & ast, int position) {
38
+ if (static_cast<size_t>(abs(position)) >= ast.elements.size())
39
+ throw ValidationError("AST child element index out of bounds: " + std::to_string(position));
40
+
41
+ if (position < 0)
42
+ position = static_cast<int>(ast.elements.size() + position);
43
+
44
+ return ast.elements[static_cast<size_t>(position)];
45
+ }
46
+
47
+ static ColumnRef CreateTerminalColumn(const TypeAst& ast) {
48
+ switch (ast.code) {
49
+ case Type::Void:
50
+ return std::make_shared<ColumnNothing>();
51
+
52
+ case Type::UInt8:
53
+ return std::make_shared<ColumnUInt8>();
54
+ case Type::UInt16:
55
+ return std::make_shared<ColumnUInt16>();
56
+ case Type::UInt32:
57
+ return std::make_shared<ColumnUInt32>();
58
+ case Type::UInt64:
59
+ return std::make_shared<ColumnUInt64>();
60
+
61
+ case Type::Int8:
62
+ return std::make_shared<ColumnInt8>();
63
+ case Type::Int16:
64
+ return std::make_shared<ColumnInt16>();
65
+ case Type::Int32:
66
+ return std::make_shared<ColumnInt32>();
67
+ case Type::Int64:
68
+ return std::make_shared<ColumnInt64>();
69
+ case Type::Int128:
70
+ return std::make_shared<ColumnInt128>();
71
+ case Type::UInt128:
72
+ return std::make_shared<ColumnUInt128>();
73
+
74
+ case Type::Float32:
75
+ return std::make_shared<ColumnFloat32>();
76
+ case Type::Float64:
77
+ return std::make_shared<ColumnFloat64>();
78
+
79
+ case Type::Decimal:
80
+ return std::make_shared<ColumnDecimal>(GetASTChildElement(ast, 0).value, GetASTChildElement(ast, -1).value);
81
+ case Type::Decimal32:
82
+ return std::make_shared<ColumnDecimal>(9, GetASTChildElement(ast, 0).value);
83
+ case Type::Decimal64:
84
+ return std::make_shared<ColumnDecimal>(18, GetASTChildElement(ast, 0).value);
85
+ case Type::Decimal128:
86
+ return std::make_shared<ColumnDecimal>(38, GetASTChildElement(ast, 0).value);
87
+
88
+ case Type::String:
89
+ return std::make_shared<ColumnString>();
90
+ case Type::FixedString:
91
+ return std::make_shared<ColumnFixedString>(GetASTChildElement(ast, 0).value);
92
+
93
+ case Type::DateTime:
94
+ if (ast.elements.empty()) {
95
+ return std::make_shared<ColumnDateTime>();
96
+ } else {
97
+ return std::make_shared<ColumnDateTime>(GetASTChildElement(ast, 0).value_string);
98
+ }
99
+ case Type::DateTime64:
100
+ if (ast.elements.empty()) {
101
+ return nullptr;
102
+ }
103
+ if (ast.elements.size() == 1) {
104
+ return std::make_shared<ColumnDateTime64>(ast.elements[0].value);
105
+ } else {
106
+ return std::make_shared<ColumnDateTime64>(ast.elements[0].value, ast.elements[1].value_string);
107
+ }
108
+ case Type::Date:
109
+ return std::make_shared<ColumnDate>();
110
+ case Type::Date32:
111
+ return std::make_shared<ColumnDate32>();
112
+ case Type::IPv4:
113
+ return std::make_shared<ColumnIPv4>();
114
+ case Type::IPv6:
115
+ return std::make_shared<ColumnIPv6>();
116
+
117
+ case Type::UUID:
118
+ return std::make_shared<ColumnUUID>();
119
+
120
+ case Type::Point:
121
+ return std::make_shared<ColumnPoint>();
122
+
123
+ case Type::Ring:
124
+ return std::make_shared<ColumnRing>();
125
+
126
+ case Type::Polygon:
127
+ return std::make_shared<ColumnPolygon>();
128
+
129
+ case Type::MultiPolygon:
130
+ return std::make_shared<ColumnMultiPolygon>();
131
+
132
+ case Type::Time:
133
+ return std::make_shared<ColumnTime>();
134
+ case Type::Time64:
135
+ if (ast.elements.empty()) {
136
+ return nullptr;
137
+ }
138
+ return std::make_shared<ColumnTime64>(GetASTChildElement(ast, 0).value);
139
+ default:
140
+ return nullptr;
141
+ }
142
+ }
143
+
144
+ static ColumnRef CreateColumnFromAst(const TypeAst& ast, CreateColumnByTypeSettings settings) {
145
+ switch (ast.meta) {
146
+ case TypeAst::Array: {
147
+ return std::make_shared<ColumnArray>(
148
+ CreateColumnFromAst(GetASTChildElement(ast, 0), settings)
149
+ );
150
+ }
151
+
152
+ case TypeAst::Nullable: {
153
+ return std::make_shared<ColumnNullable>(
154
+ CreateColumnFromAst(GetASTChildElement(ast, 0), settings),
155
+ std::make_shared<ColumnUInt8>()
156
+ );
157
+ }
158
+
159
+ case TypeAst::Terminal: {
160
+ return CreateTerminalColumn(ast);
161
+ }
162
+
163
+ case TypeAst::Tuple: {
164
+ std::vector<ColumnRef> columns;
165
+
166
+ columns.reserve(ast.elements.size());
167
+ for (const auto& elem : ast.elements) {
168
+ if (auto col = CreateColumnFromAst(elem, settings)) {
169
+ columns.push_back(col);
170
+ } else {
171
+ return nullptr;
172
+ }
173
+ }
174
+
175
+ return std::make_shared<ColumnTuple>(columns);
176
+ }
177
+
178
+ case TypeAst::Enum: {
179
+ std::vector<Type::EnumItem> enum_items;
180
+ //ast.elements.size() minimum is 1.
181
+ if ((ast.elements.size() % 2) != 0) {
182
+ throw ValidationError(ast.name + " content is not correct");
183
+ }
184
+
185
+ enum_items.reserve(ast.elements.size() / 2);
186
+ for (size_t i = 0; i < ast.elements.size(); i += 2) {
187
+ enum_items.push_back(Type::EnumItem{
188
+ ast.elements[i].value_string,
189
+ static_cast<int16_t>(ast.elements[i + 1].value)
190
+ });
191
+ }
192
+
193
+ if (ast.code == Type::Enum8) {
194
+ return std::make_shared<ColumnEnum8>(
195
+ Type::CreateEnum8(enum_items)
196
+ );
197
+ } else if (ast.code == Type::Enum16) {
198
+ return std::make_shared<ColumnEnum16>(
199
+ Type::CreateEnum16(enum_items)
200
+ );
201
+ }
202
+ break;
203
+ }
204
+ case TypeAst::LowCardinality: {
205
+ const auto nested = GetASTChildElement(ast, 0);
206
+ if (settings.low_cardinality_as_wrapped_column) {
207
+ switch (nested.code) {
208
+ // TODO (nemkov): update this to maximize code reuse.
209
+ case Type::String:
210
+ return std::make_shared<LowCardinalitySerializationAdaptor<ColumnString>>();
211
+ case Type::FixedString:
212
+ return std::make_shared<LowCardinalitySerializationAdaptor<ColumnFixedString>>(GetASTChildElement(nested, 0).value);
213
+ case Type::Nullable:
214
+ throw UnimplementedError("LowCardinality(" + nested.name + ") is not supported with LowCardinalityAsWrappedColumn on");
215
+ default:
216
+ throw UnimplementedError("LowCardinality(" + nested.name + ") is not supported");
217
+ }
218
+ }
219
+ else {
220
+ switch (nested.code) {
221
+ // TODO (nemkov): update this to maximize code reuse.
222
+ case Type::String:
223
+ return std::make_shared<ColumnLowCardinalityT<ColumnString>>();
224
+ case Type::FixedString:
225
+ return std::make_shared<ColumnLowCardinalityT<ColumnFixedString>>(GetASTChildElement(nested, 0).value);
226
+ case Type::Nullable:
227
+ return std::make_shared<ColumnLowCardinality>(
228
+ std::make_shared<ColumnNullable>(
229
+ CreateColumnFromAst(GetASTChildElement(nested, 0), settings),
230
+ std::make_shared<ColumnUInt8>()
231
+ )
232
+ );
233
+ default:
234
+ throw UnimplementedError("LowCardinality(" + nested.name + ") is not supported");
235
+ }
236
+ }
237
+ }
238
+ case TypeAst::SimpleAggregateFunction: {
239
+ return CreateTerminalColumn(GetASTChildElement(ast, -1));
240
+ }
241
+
242
+ case TypeAst::Map: {
243
+ if (ast.elements.size() != 2) {
244
+ throw ValidationError(ast.name + " content is not correct");
245
+ }
246
+
247
+ std::vector<ColumnRef> columns;
248
+
249
+ columns.reserve(ast.elements.size());
250
+ for (const auto& elem : ast.elements) {
251
+ if (auto col = CreateColumnFromAst(elem, settings)) {
252
+ columns.push_back(col);
253
+ } else {
254
+ return nullptr;
255
+ }
256
+ }
257
+
258
+ return std::make_shared<ColumnMap>(
259
+ std::make_shared<ColumnArray>(
260
+ std::make_shared<ColumnTuple>(columns)));
261
+ }
262
+
263
+ case TypeAst::Assign:
264
+ case TypeAst::Null:
265
+ case TypeAst::Number:
266
+ case TypeAst::String:
267
+ break;
268
+ }
269
+
270
+ return nullptr;
271
+ }
272
+
273
+ } // namespace
274
+
275
+
276
+ ColumnRef CreateColumnByType(const std::string& type_name, CreateColumnByTypeSettings settings) {
277
+ auto ast = ParseTypeName(type_name);
278
+ if (ast != nullptr) {
279
+ return CreateColumnFromAst(*ast, settings);
280
+ }
281
+
282
+ return nullptr;
283
+ }
284
+
285
+ }
@@ -0,0 +1,14 @@
1
+ #pragma once
2
+
3
+ #include "column.h"
4
+
5
+ namespace clickhouse {
6
+
7
+ struct CreateColumnByTypeSettings
8
+ {
9
+ bool low_cardinality_as_wrapped_column = false;
10
+ };
11
+
12
+ ColumnRef CreateColumnByType(const std::string& type_name, CreateColumnByTypeSettings settings = {});
13
+
14
+ }
@@ -0,0 +1,108 @@
1
+ #include "geo.h"
2
+
3
+ #include "utils.h"
4
+
5
+ namespace {
6
+ using namespace ::clickhouse;
7
+
8
+ template <Type::Code type_code>
9
+ TypeRef CreateGeoType() {
10
+ if constexpr (type_code == Type::Code::Point) {
11
+ return Type::CreatePoint();
12
+ } else if constexpr (type_code == Type::Code::Ring) {
13
+ return Type::CreateRing();
14
+ } else if constexpr (type_code == Type::Code::Polygon) {
15
+ return Type::CreatePolygon();
16
+ } else if constexpr (type_code == Type::Code::MultiPolygon) {
17
+ return Type::CreateMultiPolygon();
18
+ }
19
+ }
20
+
21
+ template <typename ColumnType>
22
+ std::shared_ptr<ColumnType> CreateColumn() {
23
+ if constexpr (std::is_same_v<ColumnType, ColumnTupleT<ColumnFloat64, ColumnFloat64>>) {
24
+ return std::make_shared<ColumnTupleT<ColumnFloat64, ColumnFloat64>>(
25
+ std::make_tuple(std::make_shared<ColumnFloat64>(), std::make_shared<ColumnFloat64>()));
26
+ } else {
27
+ return std::make_shared<ColumnType>();
28
+ }
29
+ }
30
+
31
+ } // namespace
32
+
33
+ namespace clickhouse {
34
+
35
+ template <typename NestedColumnType, Type::Code type_code>
36
+ ColumnGeo<NestedColumnType, type_code>::ColumnGeo()
37
+ : Column(CreateGeoType<type_code>()),
38
+ data_(CreateColumn<NestedColumnType>()) {
39
+ }
40
+
41
+ template <typename NestedColumnType, Type::Code type_code>
42
+ ColumnGeo<NestedColumnType, type_code>::ColumnGeo(ColumnRef data)
43
+ : Column(CreateGeoType<type_code>())
44
+ , data_(WrapColumn<NestedColumnType>(std::move(data))) {
45
+ }
46
+
47
+ template <typename NestedColumnType, Type::Code type_code>
48
+ void ColumnGeo<NestedColumnType, type_code>::Clear() {
49
+ data_->Clear();
50
+ }
51
+
52
+ template <typename NestedColumnType, Type::Code type_code>
53
+ const typename ColumnGeo<NestedColumnType, type_code>::ValueType ColumnGeo<NestedColumnType, type_code>::At(size_t n) const {
54
+ return data_->At(n);
55
+ }
56
+
57
+ template<typename NestedColumnType, Type::Code type_code>
58
+ void ColumnGeo<NestedColumnType, type_code>::Reserve(size_t new_cap) {
59
+ data_->Reserve(new_cap);
60
+ }
61
+
62
+ template <typename NestedColumnType, Type::Code type_code>
63
+ void ColumnGeo<NestedColumnType, type_code>::Append(ColumnRef column) {
64
+ if (auto col = column->template As<ColumnGeo>()) {
65
+ data_->Append(col->data_->template As<Column>());
66
+ }
67
+ }
68
+
69
+ template <typename NestedColumnType, Type::Code type_code>
70
+ bool ColumnGeo<NestedColumnType, type_code>::LoadBody(InputStream* input, size_t rows) {
71
+ return data_->LoadBody(input, rows);
72
+ }
73
+
74
+ template <typename NestedColumnType, Type::Code type_code>
75
+ void ColumnGeo<NestedColumnType, type_code>::SaveBody(OutputStream* output) {
76
+ data_->SaveBody(output);
77
+ }
78
+
79
+ template <typename NestedColumnType, Type::Code type_code>
80
+ size_t ColumnGeo<NestedColumnType, type_code>::Size() const {
81
+ return data_->Size();
82
+ }
83
+
84
+ template <typename NestedColumnType, Type::Code type_code>
85
+ ColumnRef ColumnGeo<NestedColumnType, type_code>::Slice(size_t begin, size_t len) const {
86
+ return std::make_shared<ColumnGeo>(data_->Slice(begin, len));
87
+ }
88
+
89
+ template <typename NestedColumnType, Type::Code type_code>
90
+ ColumnRef ColumnGeo<NestedColumnType, type_code>::CloneEmpty() const {
91
+ return std::make_shared<ColumnGeo>();
92
+ }
93
+
94
+ template <typename NestedColumnType, Type::Code type_code>
95
+ void ColumnGeo<NestedColumnType, type_code>::Swap(Column& other) {
96
+ auto& col = dynamic_cast<ColumnGeo&>(other);
97
+ data_.swap(col.data_);
98
+ }
99
+
100
+ template class ColumnGeo<ColumnTupleT<ColumnFloat64, ColumnFloat64>, Type::Code::Point>;
101
+
102
+ template class ColumnGeo<ColumnArrayT<ColumnPoint>, Type::Code::Ring>;
103
+
104
+ template class ColumnGeo<ColumnArrayT<ColumnRing>, Type::Code::Polygon>;
105
+
106
+ template class ColumnGeo<ColumnArrayT<ColumnPolygon>, Type::Code::MultiPolygon>;
107
+
108
+ } // namespace clickhouse
@@ -0,0 +1,79 @@
1
+ #pragma once
2
+
3
+ #include "array.h"
4
+ #include "column.h"
5
+ #include "numeric.h"
6
+ #include "tuple.h"
7
+
8
+ namespace clickhouse {
9
+
10
+ template <typename NestedColumnType, Type::Code type_code>
11
+ class ColumnGeo : public Column {
12
+ public:
13
+ using ValueType = typename NestedColumnType::ValueType;
14
+
15
+ ColumnGeo();
16
+
17
+ explicit ColumnGeo(ColumnRef data);
18
+
19
+ /// Appends one element to the end of column.
20
+ template <typename T = ValueType>
21
+ void Append(const T& value) {
22
+ data_->Append(value);
23
+ }
24
+
25
+ /// Returns element at given row number.
26
+ const ValueType At(size_t n) const;
27
+
28
+ /// Returns element at given row number.
29
+ inline const ValueType operator[](size_t n) const { return At(n); }
30
+
31
+ public:
32
+ /// Increase the capacity of the column for large block insertion.
33
+ void Reserve(size_t new_cap) override;
34
+
35
+ /// Appends content of given column to the end of current one.
36
+ void Append(ColumnRef column) override;
37
+
38
+ /// Loads column data from input stream.
39
+ bool LoadBody(InputStream* input, size_t rows) override;
40
+
41
+ /// Saves column data to output stream.
42
+ void SaveBody(OutputStream* output) override;
43
+
44
+ /// Clear column data .
45
+ void Clear() override;
46
+
47
+ /// Returns count of rows in the column.
48
+ size_t Size() const override;
49
+
50
+ /// Makes slice of the current column.
51
+ ColumnRef Slice(size_t begin, size_t len) const override;
52
+ ColumnRef CloneEmpty() const override;
53
+ void Swap(Column& other) override;
54
+
55
+ private:
56
+ std::shared_ptr<NestedColumnType> data_;
57
+ };
58
+
59
+ // /**
60
+ // * Represents a Point column.
61
+ // */
62
+ using ColumnPoint = ColumnGeo<ColumnTupleT<ColumnFloat64, ColumnFloat64>, Type::Code::Point>;
63
+
64
+ /**
65
+ * Represents a Ring column.
66
+ */
67
+ using ColumnRing = ColumnGeo<ColumnArrayT<ColumnPoint>, Type::Code::Ring>;
68
+
69
+ /**
70
+ * Represents a Polygon column.
71
+ */
72
+ using ColumnPolygon = ColumnGeo<ColumnArrayT<ColumnRing>, Type::Code::Polygon>;
73
+
74
+ /**
75
+ * Represents a MultiPolygon column.
76
+ */
77
+ using ColumnMultiPolygon = ColumnGeo<ColumnArrayT<ColumnPolygon>, Type::Code::MultiPolygon>;
78
+
79
+ } // namespace clickhouse
@@ -0,0 +1,117 @@
1
+ #include "ip4.h"
2
+
3
+ #include "../base/socket.h" // for platform-specific IPv4-related functions
4
+ #include <stdexcept>
5
+
6
+ namespace clickhouse {
7
+
8
+ ColumnIPv4::ColumnIPv4()
9
+ : Column(Type::CreateIPv4())
10
+ , data_(std::make_shared<ColumnUInt32>())
11
+ {
12
+ }
13
+
14
+ ColumnIPv4::ColumnIPv4(ColumnRef data)
15
+ : Column(Type::CreateIPv4())
16
+ , data_(data ? data->As<ColumnUInt32>() : nullptr)
17
+ {
18
+ if (!data_)
19
+ throw ValidationError("Expecting ColumnUInt32, got " + (data ? data->GetType().GetName() : "null"));
20
+ }
21
+
22
+ ColumnIPv4::ColumnIPv4(std::vector<uint32_t>&& data)
23
+ : Column(Type::CreateIPv4())
24
+ {
25
+ for (auto& addr : data) {
26
+ addr = htonl(addr);
27
+ }
28
+ data_ = std::make_shared<ColumnUInt32>(std::move(data));
29
+ }
30
+
31
+ void ColumnIPv4::Append(const std::string& str) {
32
+ uint32_t address;
33
+ if (inet_pton(AF_INET, str.c_str(), &address) != 1)
34
+ throw ValidationError("invalid IPv4 format, ip: " + str);
35
+ data_->Append(htonl(address));
36
+ }
37
+
38
+ void ColumnIPv4::Append(uint32_t ip) {
39
+ data_->Append(htonl(ip));
40
+ }
41
+
42
+ void ColumnIPv4::Append(in_addr ip) {
43
+ data_->Append(htonl(ip.s_addr));
44
+ }
45
+
46
+ void ColumnIPv4::Clear() {
47
+ data_->Clear();
48
+ }
49
+
50
+ in_addr ColumnIPv4::At(size_t n) const {
51
+ in_addr addr;
52
+ addr.s_addr = ntohl(data_->At(n));
53
+ return addr;
54
+ }
55
+
56
+ in_addr ColumnIPv4::operator [] (size_t n) const {
57
+ in_addr addr;
58
+ addr.s_addr = ntohl(data_->operator[](n));
59
+ return addr;
60
+ }
61
+
62
+ std::string ColumnIPv4::AsString(size_t n) const {
63
+ const auto& addr = this->At(n);
64
+ auto tmp_addr = addr;
65
+
66
+ char buf[INET_ADDRSTRLEN];
67
+ const char* ip_str = inet_ntop(AF_INET, &tmp_addr, buf, INET_ADDRSTRLEN);
68
+
69
+ if (ip_str == nullptr) {
70
+ throw std::system_error(
71
+ std::error_code(errno, std::generic_category()),
72
+ "Invalid IPv4 data");
73
+ }
74
+
75
+ return ip_str;
76
+ }
77
+
78
+ void ColumnIPv4::Reserve(size_t new_cap) {
79
+ data_->Reserve(new_cap);
80
+ }
81
+
82
+ void ColumnIPv4::Append(ColumnRef column) {
83
+ if (auto col = column->As<ColumnIPv4>()) {
84
+ data_->Append(col->data_);
85
+ }
86
+ }
87
+
88
+ bool ColumnIPv4::LoadBody(InputStream * input, size_t rows) {
89
+ return data_->LoadBody(input, rows);
90
+ }
91
+
92
+ void ColumnIPv4::SaveBody(OutputStream* output) {
93
+ data_->SaveBody(output);
94
+ }
95
+
96
+ size_t ColumnIPv4::Size() const {
97
+ return data_->Size();
98
+ }
99
+
100
+ ColumnRef ColumnIPv4::Slice(size_t begin, size_t len) const {
101
+ return std::make_shared<ColumnIPv4>(data_->Slice(begin, len));
102
+ }
103
+
104
+ ColumnRef ColumnIPv4::CloneEmpty() const {
105
+ return std::make_shared<ColumnIPv4>(data_->CloneEmpty());
106
+ }
107
+
108
+ void ColumnIPv4::Swap(Column& other) {
109
+ auto & col = dynamic_cast<ColumnIPv4 &>(other);
110
+ data_.swap(col.data_);
111
+ }
112
+
113
+ ItemView ColumnIPv4::GetItem(size_t index) const {
114
+ return ItemView(Type::IPv4, data_->GetItem(index));
115
+ }
116
+
117
+ }
@@ -0,0 +1,71 @@
1
+ #pragma once
2
+
3
+ #include "numeric.h"
4
+
5
+ struct in_addr;
6
+
7
+ namespace clickhouse {
8
+
9
+ class ColumnIPv4 : public Column {
10
+ public:
11
+ using DataType = in_addr;
12
+ using ValueType = in_addr;
13
+
14
+ ColumnIPv4();
15
+ /** Takes ownership of the data, expects ColumnUInt32.
16
+ * Modifying memory pointed by `data` from outside is UB.
17
+ *
18
+ * TODO: deprecate and remove as it is too dangerous and error-prone.
19
+ */
20
+ explicit ColumnIPv4(ColumnRef data);
21
+
22
+ explicit ColumnIPv4(std::vector<uint32_t>&& data);
23
+
24
+ /// Appends one element to the column.
25
+ void Append(const std::string& ip);
26
+
27
+ /// @params ip numeric value with host byte order.
28
+ void Append(uint32_t ip);
29
+
30
+ ///
31
+ void Append(in_addr ip);
32
+
33
+ /// Returns element at given row number.
34
+ in_addr At(size_t n) const;
35
+
36
+ /// Returns element at given row number.
37
+ in_addr operator [] (size_t n) const;
38
+
39
+ std::string AsString(size_t n) const;
40
+
41
+ public:
42
+ /// Increase the capacity of the column for large block insertion.
43
+ void Reserve(size_t new_cap) override;
44
+
45
+ /// Appends content of given column to the end of current one.
46
+ void Append(ColumnRef column) override;
47
+
48
+ /// Loads column data from input stream.
49
+ bool LoadBody(InputStream* input, size_t rows) override;
50
+
51
+ /// Saves column data to output stream.
52
+ void SaveBody(OutputStream* output) override;
53
+
54
+ /// Clear column data .
55
+ void Clear() override;
56
+
57
+ /// Returns count of rows in the column.
58
+ size_t Size() const override;
59
+
60
+ /// Makes slice of the current column.
61
+ ColumnRef Slice(size_t begin, size_t len) const override;
62
+ ColumnRef CloneEmpty() const override;
63
+ void Swap(Column& other) override;
64
+
65
+ ItemView GetItem(size_t index) const override;
66
+
67
+ private:
68
+ std::shared_ptr<ColumnUInt32> data_;
69
+ };
70
+
71
+ }