Skip to content

Commit 3ae74d0

Browse files
authored
Merge pull request ClickHouse#85366 from vitlibar/add-promql-parser-1
Add promql parser #1: Add contrib and build scripts
2 parents d5268a1 + 97979c2 commit 3ae74d0

33 files changed

Lines changed: 6567 additions & 0 deletions

.clang-tidy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77

88
HeaderFilterRegex: '^.*/(base|src|programs|utils)/.*(h|hpp)$'
99

10+
# We don't want to use clang-tidy diagnostics in the "contrib" folder.
11+
ExcludeHeaderFilterRegex: '^.*/contrib/.*'
12+
1013
Checks: [
1114
'*',
1215

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,3 +381,6 @@
381381
[submodule "contrib/crc32c"]
382382
path = contrib/crc32c
383383
url = https://github.com/google/crc32c.git
384+
[submodule "contrib/antlr4-cpp-runtime"]
385+
path = contrib/antlr4-cpp-runtime
386+
url = https://github.com/antlr/antlr4.git

contrib/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@ add_contrib (ulid-c-cmake ulid-c)
238238
add_contrib (libssh-cmake libssh)
239239

240240
add_contrib (prometheus-protobufs-cmake prometheus-protobufs prometheus-protobufs-gogo)
241+
add_contrib (antlr4-cpp-runtime-cmake antlr4-cpp-runtime)
242+
add_contrib (antlr4-grammars-cmake antlr4-grammars)
241243

242244
add_contrib (numactl-cmake numactl)
243245

contrib/antlr4-cpp-runtime

Submodule antlr4-cpp-runtime added at b91cecf
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
set(ENABLE_ANTLR4_CPP_RUNTIME_DEFAULT ${ENABLE_LIBRARIES})
2+
option(ENABLE_ANTLR4_CPP_RUNTIME "Use ANTLR4 C++ runtime" ${ENABLE_ANTLR4_CPP_RUNTIME_DEFAULT})
3+
4+
if(NOT ENABLE_ANTLR4_CPP_RUNTIME)
5+
message(STATUS "Not using ANTLR4 C++ runtime")
6+
return()
7+
endif()
8+
9+
set(_ANTLR4_CPP_RUNTIME_SOURCE_DIR "${ClickHouse_SOURCE_DIR}/contrib/antlr4-cpp-runtime/runtime/Cpp")
10+
11+
file(GLOB _ANTLR4_CPP_RUNTIME_SRC
12+
"${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/*.cpp"
13+
"${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/atn/*.cpp"
14+
"${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/dfa/*.cpp"
15+
"${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/internal/*.cpp"
16+
"${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/misc/*.cpp"
17+
"${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/support/*.cpp"
18+
"${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/tree/*.cpp"
19+
"${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/tree/pattern/*.cpp"
20+
"${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/tree/xpath/*.cpp"
21+
)
22+
23+
set(_ANTLR4_CPP_RUNTIME_INCLUDE_DIRS
24+
${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src
25+
)
26+
27+
set(_ANTLR4_CPP_RUNTIME_PRIVATE_INCLUDE_DIRS
28+
${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/atn
29+
${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/dfa
30+
${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/internal
31+
${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/misc
32+
${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/support
33+
${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/tree
34+
${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/tree/pattern
35+
${_ANTLR4_CPP_RUNTIME_SOURCE_DIR}/runtime/src/tree/xpath
36+
)
37+
38+
add_library(_ch_contrib_antlr4_cpp_runtime ${_ANTLR4_CPP_RUNTIME_SRC})
39+
40+
target_include_directories(_ch_contrib_antlr4_cpp_runtime
41+
PUBLIC "${_ANTLR4_CPP_RUNTIME_INCLUDE_DIRS}"
42+
PRIVATE "${_ANTLR4_CPP_RUNTIME_PRIVATE_INCLUDE_DIRS}"
43+
)
44+
45+
add_library(ch_contrib::antlr4_cpp_runtime ALIAS _ch_contrib_antlr4_cpp_runtime)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
set(ENABLE_ANTLR4_GRAMMARS_DEFAULT ${ENABLE_LIBRARIES})
2+
option(ENABLE_ANTLR4_GRAMMARS "Use ANTLR4 grammars" ${ENABLE_ANTLR4_GRAMMARS_DEFAULT})
3+
4+
if(NOT ENABLE_ANTLR4_GRAMMARS)
5+
message(STATUS "Not using ANTLR4 grammars")
6+
return()
7+
endif()
8+
9+
set(_ANTLR4_GRAMMARS_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/antlr4-grammars-cmake/generated")
10+
set(_ANTLR4_GRAMMARS_SOURCE_DIR "${_ANTLR4_GRAMMARS_INCLUDE_DIR}/antlr4_grammars")
11+
12+
file(GLOB _ANTLR4_GRAMMARS_SRC "${_ANTLR4_GRAMMARS_SOURCE_DIR}/*.h" "${_ANTLR4_GRAMMARS_SOURCE_DIR}/*.cpp")
13+
14+
add_library(_ch_contrib_antlr4_grammars ${_ANTLR4_GRAMMARS_SRC})
15+
16+
target_include_directories(_ch_contrib_antlr4_grammars
17+
PUBLIC "${_ANTLR4_GRAMMARS_INCLUDE_DIR}"
18+
)
19+
20+
target_link_libraries(_ch_contrib_antlr4_grammars PUBLIC ch_contrib::antlr4_cpp_runtime)
21+
22+
add_library(ch_contrib::antlr4_grammars ALIAS _ch_contrib_antlr4_grammars)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/usr/bin/env bash
2+
3+
# Run this script to generate header and source files in folder "./generated"
4+
# from grammar files PromQLParser.g4, PromQLLexer.g4
5+
6+
# Get the directory of this script.
7+
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
8+
9+
# Generated header and source files will be put into folder "./generated".
10+
ANTLR4_GRAMMARS_OUTDIR="${SCRIPT_DIR}/generated/antlr4_grammars"
11+
rm -rf "${SCRIPT_DIR}/generated"
12+
mkdir -p "${ANTLR4_GRAMMARS_OUTDIR}"
13+
14+
# Create a Python virtual environment to install ANTLR4 tool.
15+
ANTLR4_TOOLS_ENV_DIR=$(mktemp -d)
16+
python3 -m venv "${ANTLR4_TOOLS_ENV_DIR}"
17+
18+
# Install the ANTLR4 tool.
19+
"${ANTLR4_TOOLS_ENV_DIR}/bin/pip3" install antlr4-tools
20+
21+
# Use the ANTLR tool to generate header and source files in folder ./generated
22+
(cd "${SCRIPT_DIR}/../antlr4-grammars/promql" && "${ANTLR4_TOOLS_ENV_DIR}/bin/antlr4" -o "${ANTLR4_GRAMMARS_OUTDIR}" -Dlanguage=Cpp -visitor PromQLParser.g4 PromQLLexer.g4 -package antlr4_grammars)
23+
24+
# Remove the temporary directory.
25+
rm -rf "${ANTLR4_TOOLS_ENV_DIR}"

0 commit comments

Comments
 (0)