diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fe4877b..6cd9fcc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -370,7 +370,7 @@ jobs: ldd '"$LIBS"'/libchdb_java_jni.so echo - java -Xmx512m -Dchdb.library.path='"$LIBS"' -Dchdb.it.engine.version=26.7.3 -cp "'"$PWD"'/chdb-jdbc/target/classes:'"$PWD"'/chdb-integration-tests/target/test-classes:'"$(cat target/it-cp.txt)"'" org.junit.platform.console.ConsoleLauncher execute --select-package=org.chdb.it --include-classname=".*IT" --details=summary --disable-banner --fail-if-no-tests + java -Xmx512m -Dchdb.library.path='"$LIBS"' -Dchdb.it.engine.version=26.11.0-rc.2 -cp "'"$PWD"'/chdb-jdbc/target/classes:'"$PWD"'/chdb-integration-tests/target/test-classes:'"$(cat target/it-cp.txt)"'" org.junit.platform.console.ConsoleLauncher execute --select-package=org.chdb.it --include-classname=".*IT" --details=summary --disable-banner --fail-if-no-tests ' - name: A query over the memory limit returns an exception, not an OOM kill diff --git a/README.md b/README.md index 000f786..f323d88 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,12 @@ and is loaded from a real packaged JAR, in CI: engine does. Each package records the figure it was built against in its `manifest.properties`, and CI runs the whole test suite on AlmaLinux 8 to demonstrate the floor rather than infer it from symbol versions. -- **Engine:** chDB Core **26.7.3**, pinned. The C ABI is version-locked, so the driver +- **Engine:** chDB Core **26.11.0-rc.2**, pinned. The C ABI is version-locked, so the driver refuses to run against a different engine build rather than risking a struct-layout mismatch. + That release is a chdb-core *pre-release*, pinned to validate the ClickHouse 26.11 baseline; + a binding on an engine RC is itself an RC and is not the V1 GA + ([work plan §4.3](CHDB_JAVA_V1_WORK_PLAN.md)), so the stable chdb-core release has to be + pinned before `1.0.0`. - **Not supported:** Windows, musl (Alpine), 32-bit, GraalVM Native Image, Android. ## Installing @@ -101,15 +105,16 @@ architecture — declare the driver plus each native package you need: The BOM keeps the driver and every native package on one version, which they must be. **A native package is large**, because it contains the whole engine: 112 MB for macOS arm64, -128 MB for macOS x86_64, 130 MB for Linux aarch64, 167 MB for Linux x86_64, and around 350 MB -unpacked. There is no all-platforms package, on purpose: it would be the sum of those four. +144 MB for macOS x86_64, 158 MB for Linux aarch64 and 177 MB for Linux x86_64 on engine +26.11.0-rc.2 (unchanged from rc.1), and about 350 to 545 MB unpacked. There is no +all-platforms package, on purpose: it would be the sum of those four. ### Versioning SemVer, on the binding alone: `1.0.0` is the first release and a major bump means a breaking change to the Java API. The engine version is not part of it — it is in each package's `manifest.properties`, pinned in [`scripts/engine.properties`](scripts/engine.properties) and -named in the release notes (`26.7.3` today), and the driver refuses to load any other build. +named in the release notes (`26.11.0-rc.2` today), and the driver refuses to load any other build. The first test version is the RC `1.0.0-rc.1`; later candidates increment the final number, and the first stable Maven release is `1.0.0`. RCs use the permanent `com.clickhouse.chdb` groupId, diff --git a/chdb-integration-tests/src/test/java/org/chdb/it/LicenseInventoryIT.java b/chdb-integration-tests/src/test/java/org/chdb/it/LicenseInventoryIT.java index 2ac6f38..4fbd35d 100644 --- a/chdb-integration-tests/src/test/java/org/chdb/it/LicenseInventoryIT.java +++ b/chdb-integration-tests/src/test/java/org/chdb/it/LicenseInventoryIT.java @@ -139,6 +139,10 @@ void inventoryMatchesTheEngine() throws Exception { *

These are the whole of what a redistribution review has to reach a position on. LGPL * carries obligations under static linking that it does not under dynamic; MPL-2.0 is * weaker, file-level copyleft, but it is still copyleft and still has no alternative half. + * + *

numactl (LGPL) was in this set through engine v26.7.3 and left it with v26.11.0-rc.1, + * whose chdb-core tree no longer has {@code contrib/numactl} at all, so it is a component + * gone from the engine rather than one relicensed. */ private static Map> knownCopyleftOnly() { Map> known = new TreeMap<>(); @@ -147,7 +151,7 @@ private static Map> knownCopyleftOnly() { new TreeSet<>( java.util.Arrays.asList( "lemmagen-c", "libgsasl", "libssh", "mariadb-connector-c", - "numactl", "xz"))); + "xz"))); known.put( "MPL-2.0", new TreeSet<>( diff --git a/chdb-integration-tests/src/test/java/org/chdb/it/ProcessLifecycleIT.java b/chdb-integration-tests/src/test/java/org/chdb/it/ProcessLifecycleIT.java index 2117e40..ec310f2 100644 --- a/chdb-integration-tests/src/test/java/org/chdb/it/ProcessLifecycleIT.java +++ b/chdb-integration-tests/src/test/java/org/chdb/it/ProcessLifecycleIT.java @@ -136,19 +136,21 @@ private static final class ForkResult { /** * A JVM that exits with a streaming result set still open. * - *

Without the shutdown hook this aborts inside the engine rather than exiting: + *

Without the shutdown hook this used to abort rather than exit -- on macOS arm64 as * *

      * libc++ Hardening assertion !empty() failed: front() called on an empty vector
      * 
* - * with SIGABRT (exit 134) and a stack naming ClickHouse internals. Narrow but easy to hit: - * exiting with a Connection open is fine, and closing the Connection while a stream is open - * is fine, because that closes the stream. Only an open stream at exit does it. + * with SIGABRT (exit 134) and a stack naming ClickHouse internals, on Linux x86_64 as a + * SIGSEGV. Narrow but easy to hit: exiting with a Connection open was fine, and closing the + * Connection while a stream is open is fine, because that closes the stream. Only an open + * stream at exit did it. * - *

Still true on engine 26.7.2-rc.2, the release that added {@code - * chdb_shutdown()}: that call declines to do anything while a connection is open, so it - * does not replace the hook's drain. See {@link #chdbShutdownStopsTheEngine()}. + *

Still true on engine 26.7.2-rc.2, the release that added {@code chdb_shutdown()}: + * that call declines to do anything while a connection is open, so it does not replace the + * hook's drain. See {@link #chdbShutdownStopsTheEngine()}. What finally removed the abort + * was a fix in the shim, not the engine; see {@link #hookCanBeDisabled()}. */ public static final class ExitsWithOpenStream { public static void main(String[] args) throws Exception { @@ -177,30 +179,30 @@ void exitWithOpenStreamIsClean() throws Exception { } @Test - @DisplayName("the same JVM with the hook disabled reaches the engine's own teardown path") + @DisplayName("the same JVM with the hook disabled reaches the engine's own teardown path, and" + + " exits cleanly") @Timeout(value = 3, unit = TimeUnit.MINUTES) void hookCanBeDisabled() throws Exception { - // Still asserting only that the switch is honoured, not that the engine aborts. - // - // chdb_shutdown() arriving in the 26.7.2-rc.2 baseline was the event this test was - // written to survive, and surviving it is exactly what happened: the abort is - // unchanged, because chdb_shutdown() refuses to act while a connection is open and - // this JVM's connection is open. So there is still no correct exit code to pin here, - // and pinning 134 would turn a real upstream fix into a CI failure. What matters is - // that a host managing its own teardown can turn the hook off. - // - // Issue #22 did not change that either. It removed the hook's other hazard -- see - // exitWithQueriesInFlightIsPrompt -- but this shape's abort is the engine's own - // behaviour on an exit with a stream open, which no driver change reaches. The switch - // is therefore still the escape hatch and still only assertable as a switch. + // This used to assert only that the switch is honoured, on the grounds that the abort + // with the hook off was the engine's own behaviour on an exit with a stream open, which + // no driver change could reach -- so pinning 134 would have turned an upstream fix into + // a CI failure. The abort was the shim's, as traced on Linux x86_64 with gdb: SIGSEGV + // in chdb_close_conn() called from ~HandleRegistry, on every run -- 20 of 20 on engine + // v26.11.0-rc.2, and the same on rc.1. The handle registry was a function-local static, + // and its destructor closed the leaked stream and connection from inside exit(), after + // statics the engine had constructed during the query were already destroyed. The + // registry is never destroyed now, so the leaked handles are left to the engine's own + // exit teardown, and this JVM exits 0, 20 of 20. ForkResult result = fork(ExitsWithOpenStream.class.getName(), List.of("-Dchdb.shutdownHook=false")); assertTrue(result.output.contains("leaked an open stream"), result.output); - if (result.exitCode != 0) { - System.out.println( - "with the hook off, this engine exits " + result.exitCode - + " -- which is what the hook exists to prevent"); - } + assertEquals( + 0, + result.exitCode, + "with the hook off the leaked stream is left to the engine's exit teardown, which" + + " exits cleanly; a crash here means handles are being closed from a" + + " static destructor inside exit() again.\n" + + result.output); } /** @@ -452,6 +454,49 @@ void chdbShutdownStopsTheEngine() throws Exception { ? "reconnecting is refused" : "reconnecting is allowed")); } + /** + * The same after a {@code MergeTree} table has been used, on the storage path given as the + * argument: every connection closed, then {@code chdb_shutdown()}. + */ + public static final class ShutsTheEngineDownAfterMergeTree { + public static void main(String[] args) throws Exception { + try (Connection connection = DriverManager.getConnection("jdbc:chdb:" + args[0]); + Statement statement = connection.createStatement()) { + statement.execute("CREATE TABLE t (x UInt32) ENGINE = MergeTree ORDER BY x"); + statement.executeUpdate("INSERT INTO t SELECT number FROM numbers(1000)"); + try (ResultSet rs = statement.executeQuery("SELECT count() FROM t")) { + rs.next(); + System.out.println("rows=" + rs.getLong(1)); + } + } + System.out.println("shutdown=" + ChdbNative.shutdown()); + } + } + + @Test + @DisplayName("chdb_shutdown() also succeeds after a MergeTree table was used") + @Timeout(value = 3, unit = TimeUnit.MINUTES) + void chdbShutdownSucceedsAfterMergeTree() throws Exception { + // Through engine v26.11.0-rc.1 this returned 1 with every connection closed: the + // MergeTree background executors outlived the last connection, their idle workers kept + // the global thread pool busy, and rc.1 said so on stderr ("chDB global pool shutdown + // refused ... MergeTreeBackgroundExecutorThreads"). chdb-core #312, in v26.11.0-rc.2, + // destroys them on shutdown. Findings section 9 has the measurement. + Path dir = Files.createTempDirectory("chdb shutdown mergetree"); + ForkResult result = + fork(ShutsTheEngineDownAfterMergeTree.class.getName(), List.of(), dir.toString()); + assertEquals(0, result.exitCode, result.output); + assertTrue(result.output.contains("rows=1000"), result.output); + assertTrue( + result.output.contains("shutdown=0"), + "chdb_shutdown() should stop the engine once every connection is closed, whether" + + " or not a MergeTree table was used:\n" + + result.output); + assertFalse( + result.output.contains("shutdown refused"), + "the engine should not report a refused shutdown:\n" + result.output); + } + /** A JVM that closes everything before exiting, which must also be clean. */ public static final class ExitsCleanly { public static void main(String[] args) throws Exception { diff --git a/chdb-jdbc/src/main/java/org/chdb/internal/ChdbNative.java b/chdb-jdbc/src/main/java/org/chdb/internal/ChdbNative.java index 99360a7..db66e60 100644 --- a/chdb-jdbc/src/main/java/org/chdb/internal/ChdbNative.java +++ b/chdb-jdbc/src/main/java/org/chdb/internal/ChdbNative.java @@ -57,7 +57,7 @@ private ChdbNative() { /** ABI version the loaded shim was built with. */ public static native int jniAbiVersion(); - /** {@code chdb_version()} of the loaded libchdb, e.g. {@code "26.7.3"}. */ + /** {@code chdb_version()} of the loaded libchdb, e.g. {@code "26.11.0-rc.2"}. */ public static native String engineVersion(); /** Build provenance of the shim: git commit, compiler, engine headers it compiled against. */ @@ -142,10 +142,10 @@ public static native long query( * {@code chdb_classify_query_n}. Decides whether a statement has a result set to stream * without executing it, using the engine's own parser. * - *

Optional symbol: it landed in chdb-core v26.7.2-rc.2, so the pinned v26.7.3 baseline has it, - * so it is resolved by {@code dlsym} rather than linked. It is present on the baseline; - * the null path is what an older engine gets, and means the caller must fall back to - * {@code StatementShape}'s own analysis. + *

Optional symbol: it landed in chdb-core v26.7.2-rc.2, so the pinned v26.11.0-rc.2 + * baseline has it, so it is resolved by {@code dlsym} rather than linked. It is present on + * the baseline; the null path is what an older engine gets, and means the caller must fall + * back to {@code StatementShape}'s own analysis. * * @return {@code {queryClass, statementCount, flags}} where {@code queryClass} follows * {@code chdb_query_class} (0 READ_ONLY, 1 MUTATING, 2 MUTATING_GLOBAL, 3 CONTROL, @@ -204,9 +204,9 @@ public static native long rowBinaryOpen( * every result destroyed first, and the engine cannot be used again in this process. * *

Optional symbol, like {@link #classifyQuery(long, byte[])}: it landed in chdb-core - * v26.7.2-rc.2, so the pinned v26.7.3 baseline has it, and it is resolved by {@code dlsym} rather - * than linked. Not having it is not a failure -- the threads it would join are reaped by - * process exit either way. + * v26.7.2-rc.2, so the pinned v26.11.0-rc.2 baseline has it, and it is resolved by {@code + * dlsym} rather than linked. Not having it is not a failure -- the threads it would join are + * reaped by process exit either way. * *

1 is the ordinary answer while any connection is still open: the engine declines to * tear itself down under a live connection rather than leaving it dangling. Callers that diff --git a/chdb-jdbc/src/main/java/org/chdb/jdbc/ChdbStatement.java b/chdb-jdbc/src/main/java/org/chdb/jdbc/ChdbStatement.java index 4374b4b..a009140 100644 --- a/chdb-jdbc/src/main/java/org/chdb/jdbc/ChdbStatement.java +++ b/chdb-jdbc/src/main/java/org/chdb/jdbc/ChdbStatement.java @@ -365,7 +365,7 @@ private void checkDeadlineSurvivedTheOpen(String sql) throws SQLException { private StatementShape.Route route(String sql) throws SQLException { int[] analysis; try { - // Null when the engine predates chdb_classify_query_n, which the v26.7.3 + // Null when the engine predates chdb_classify_query_n, which the v26.11.0-rc.2 // baseline does not -- but a loader pointed at another libchdb still can, in which // case StatementShape falls back to its keyword scan. analysis = ChdbNative.classifyQuery(connection.handle(), Utf8.encode(sql)); diff --git a/chdb-jdbc/src/main/java/org/chdb/jdbc/ShutdownCleanup.java b/chdb-jdbc/src/main/java/org/chdb/jdbc/ShutdownCleanup.java index 17c9a46..df613d8 100644 --- a/chdb-jdbc/src/main/java/org/chdb/jdbc/ShutdownCleanup.java +++ b/chdb-jdbc/src/main/java/org/chdb/jdbc/ShutdownCleanup.java @@ -13,9 +13,8 @@ /** * Closes connections the application forgot, at JVM shutdown. * - *

What this prevents

- * A JVM that exits with a streaming result set still open aborts inside the engine rather than - * exiting: + *

What this prevented

+ * A JVM that exited with a streaming result set still open used to abort rather than exit: * *
  * libc++ Hardening assertion !empty() failed: front() called on an empty vector
@@ -28,6 +27,14 @@
  * dies with SIGABRT and a stack that names ClickHouse internals, which tells the application
  * nothing about the result set it leaked.
  *
+ * 

The abort was the JNI shim's, as traced on Linux x86_64, where it is a SIGSEGV in + * {@code chdb_close_conn()}: the shim's handle registry was a function-local static whose + * destructor closed the leaked stream and connection from inside {@code exit()}, after statics + * the engine constructed during the query were already gone. The registry is never destroyed + * now, so with this hook turned off the leaked handles are left to the engine's own exit + * teardown and the JVM exits cleanly. The hook still closes them on the way out, because that + * is what lets {@link #stopEngine()} join the engine's threads. + * *

Closing connections in a shutdown hook covers it: {@code ChdbConnection.close()} closes * its statements, which close their result sets, which is the state the engine tolerates. Once * they are closed, {@link #stopEngine()} asks the engine to join its own threads. diff --git a/chdb-jdbc/src/main/java/org/chdb/jdbc/StatementShape.java b/chdb-jdbc/src/main/java/org/chdb/jdbc/StatementShape.java index 9d2ab0f..a655d2f 100644 --- a/chdb-jdbc/src/main/java/org/chdb/jdbc/StatementShape.java +++ b/chdb-jdbc/src/main/java/org/chdb/jdbc/StatementShape.java @@ -29,10 +29,10 @@ *

    *
  1. {@code chdb_classify_query_n}, which parses the SQL with the engine's own parser and * settings and executes nothing. Available from engine v26.7.2-rc.2, so present on the - * pinned v26.7.3 baseline and asked in practice. Authoritative about whether there is a - * result set, but silent on which door delivers it: {@code - * CHDB_QUERY_READ_ONLY} covers a {@code SELECT} and a {@code SHOW} alike, so it cannot - * tell the two entry points apart. See {@link #route(int[], String)}. + * pinned v26.11.0-rc.2 baseline and asked in practice. Authoritative about + * whether there is a result set, but silent on which door delivers it: + * {@code CHDB_QUERY_READ_ONLY} covers a {@code SELECT} and a {@code SHOW} alike, so it + * cannot tell the two entry points apart. See {@link #route(int[], String)}. *
  2. the leading-keyword scan below, which answers the half the classifier does not, and * answers both halves for an engine that does not export it. Nothing older than the * baseline is supported, but the loader can be pointed at another {@code libchdb} of the diff --git a/chdb-jdbc/src/test/java/org/chdb/jdbc/StatementShapeTest.java b/chdb-jdbc/src/test/java/org/chdb/jdbc/StatementShapeTest.java index 88766b5..9dafbf7 100644 --- a/chdb-jdbc/src/test/java/org/chdb/jdbc/StatementShapeTest.java +++ b/chdb-jdbc/src/test/java/org/chdb/jdbc/StatementShapeTest.java @@ -13,7 +13,7 @@ * an entry point that refuses it -- which is what issue #12 was -- so all three are covered in * both directions. * - *

    The pinned v26.7.3 baseline does export chdb_classify_query_n, so the scan is no + *

    The pinned v26.11.0-rc.2 baseline does export chdb_classify_query_n, so the scan is no * longer the only thing deciding. It is still what decides whether a result set is streamed or * materialized, because the classifier does not distinguish those, as well as * deciding both halves whenever the classifier is absent or refuses the text -- hence the cases diff --git a/chdb-jni/include/chdb.h b/chdb-jni/include/chdb.h index 5017248..1bef187 100644 --- a/chdb-jni/include/chdb.h +++ b/chdb-jni/include/chdb.h @@ -12,7 +12,7 @@ extern "C" { #define CHDB_EXPORT __attribute__((visibility("default"))) -#define CHDB_VERSION "26.7.3" +#define CHDB_VERSION "26.11.0-rc.2" /** * Returns the version of the linked chDB library. @@ -24,6 +24,8 @@ CHDB_EXPORT const char * chdb_version(void); // WARNING: The following structs are deprecated and will be removed in a future version. struct local_result { + /// buf is NOT NUL-terminated: len is the only length. Treating buf as a C string + /// (printf("%s"), strlen) reads past the end of the buffer. char * buf; size_t len; void * _vec; // std::vector *, for freeing @@ -708,6 +710,9 @@ CHDB_EXPORT void chdb_destroy_insert_stream(chdb_insert_stream stream); * Gets pointer to the result data buffer * @param result The query result handle * @return Read-only pointer to the result data + * @note NOT NUL-terminated. The buffer is exactly chdb_result_length() bytes and the byte + * after it belongs to no one -- printf("%s"), strlen() and strcpy() read out of bounds. + * Use the length: fwrite(chdb_result_buffer(r), 1, chdb_result_length(r), stdout). */ CHDB_EXPORT char * chdb_result_buffer(chdb_result * result); @@ -930,6 +935,43 @@ CHDB_EXPORT chdb_state chdb_arrow_array_scan( */ CHDB_EXPORT chdb_state chdb_arrow_unregister_table(chdb_connection conn, const char * table_name); +/** + * Options for direct Arrow insert APIs. + */ +typedef struct chdb_arrow_insert_options +{ + /// Optional INSERT SETTINGS clause body, e.g. "max_threads=4,min_insert_block_size_rows=65536". + /// Pass NULL for engine defaults. + const char * settings; +} chdb_arrow_insert_options; + +/** + * Insert rows from an Arrow C Data Interface schema+array directly into a + * MergeTree (or compatible) table. Combines register, INSERT … SELECT, and + * unregister in one call. Destination columns are matched by name from the + * Arrow schema (not by position), so ALTER TABLE ADD COLUMN is safe. + * + * @param conn Active connection + * @param dest_table Destination table identifier (bare name or already-quoted) + * @param arrow_schema Arrow schema pointer + * @param arrow_array Arrow array pointer + * @param options Optional insert settings; pass NULL for defaults + * @return chdb_result with metrics or error (no result buffer on success) + */ +CHDB_EXPORT chdb_result * chdb_insert_arrow_array( + chdb_connection conn, const char * dest_table, + chdb_arrow_schema arrow_schema, chdb_arrow_array arrow_array, + const chdb_arrow_insert_options * options); + +/** + * Insert rows from an Arrow C Data Interface stream directly into a destination table. + * See chdb_insert_arrow_array for semantics. + */ +CHDB_EXPORT chdb_result * chdb_insert_arrow_stream( + chdb_connection conn, const char * dest_table, + chdb_arrow_stream arrow_stream, + const chdb_arrow_insert_options * options); + //===--------------------------------------------------------------------===// // Backup, Restore and Statement Classification //===--------------------------------------------------------------------===// @@ -1121,8 +1163,11 @@ CHDB_EXPORT void chdb_reset_signal_handlers(void); * chdb_connect(): callers are serialized, and a connect racing a shutdown either * gets in first and is counted, or arrives later and is refused. * - * Skipping it stays as safe as it has always been for a process that just exits: - * the threads left running are reaped by process exit. + * A C/C++/Go host must call this before its own runtime teardown or unloading + * the library. OS thread reaping is not a substitute for Context/catalog + * cleanup: C++ static destructors can run while those resources are still + * referenced. CHDBError also means embedded cleanup was incomplete; do not + * treat a zero connection count as proof that the engine stopped cleanly. * * @return CHDBSuccess once no chDB thread is left running, CHDBError if a * connection is still open or some thread could not be stopped diff --git a/chdb-jni/src/chdb_jni.cpp b/chdb-jni/src/chdb_jni.cpp index e1c58f7..e052165 100644 --- a/chdb-jni/src/chdb_jni.cpp +++ b/chdb-jni/src/chdb_jni.cpp @@ -622,8 +622,8 @@ Java_org_chdb_internal_ChdbNative_classifyQuery(JNIEnv * env, jclass, jlong conn { try { - // Optional symbol: present from v26.7.2-rc.2, so on the pinned v26.7.3 baseline, absent - // on anything older. Null tells the Java side to use its own statement-shape + // Optional symbol: present from v26.7.2-rc.2, so on the pinned v26.11.0-rc.2 baseline, + // absent on anything older. Null tells the Java side to use its own statement-shape // heuristic rather than failing the query. const auto classify = optionalApi().classify_query_n; if (classify == nullptr) diff --git a/chdb-jni/src/chdb_jni_handles.h b/chdb-jni/src/chdb_jni_handles.h index 682ae6a..c6ccc4e 100644 --- a/chdb-jni/src/chdb_jni_handles.h +++ b/chdb-jni/src/chdb_jni_handles.h @@ -80,8 +80,14 @@ class HandleRegistry public: static HandleRegistry & instance() { - static HandleRegistry registry; - return registry; + // Never destroyed, on purpose. As a function-local static its destructor would run + // inside exit() and close every handle still registered -- chdb_close_conn() on a + // connection the application leaked -- from static destruction, after the statics the + // engine constructed later (during the first query) are already gone. A JVM exiting + // with a ResultSet open and -Dchdb.shutdownHook=false died that way, SIGSEGV inside + // chdb_close_conn(). Left open, the handles go to the engine's own exit teardown. + static HandleRegistry * const registry = new HandleRegistry(); + return *registry; } int64_t insert(const std::shared_ptr & handle) diff --git a/chdb-jni/src/chdb_optional_api.h b/chdb-jni/src/chdb_optional_api.h index 9d22840..13c9e4f 100644 --- a/chdb-jni/src/chdb_optional_api.h +++ b/chdb-jni/src/chdb_optional_api.h @@ -1,6 +1,6 @@ // chDB C API entry points the shim resolves at runtime rather than linking. // -// The baseline is chdb-core v26.7.3 (work plan section 2.1). Both of these arrived in +// The baseline is chdb-core v26.11.0-rc.2 (work plan section 2.1). Both of these arrived in // v26.7.2-rc.2 -- neither is in v26.7.0 or v26.7.1-rc.1, whose export lists and headers have // neither name -- and both are exported by the current baseline, checked in its release // library rather than in an export list: @@ -44,7 +44,7 @@ struct QueryAnalysisV1 uint32_t query_class; }; -// chdb_query_class values, as of v26.7.3. Kept in sync with ChdbNative.classifyQuery's +// chdb_query_class values, as of v26.11.0-rc.2. Kept in sync with ChdbNative.classifyQuery's // documented return contract. enum QueryClass : uint32_t { diff --git a/docs/memory.md b/docs/memory.md index 5dfe0b2..08beaa6 100644 --- a/docs/memory.md +++ b/docs/memory.md @@ -33,10 +33,12 @@ docker run --memory=4g \ jdbc:chdb:/data?max_memory_usage=2000000000 ``` -That URL form works on the pinned v26.7.3 baseline. First measured on v26.7.2-rc.2 with +That URL form works on the pinned v26.11.0-rc.2 baseline. First measured on v26.7.2-rc.2 with `?max_threads=7&max_result_rows=13&max_block_size=4096`: `system.settings` reports 7, 13 and 4096 with `changed = 1`, and the cap is enforced rather than merely reported — a 100-row -`SELECT` under `max_result_rows=13` fails with ClickHouse error 396. +`SELECT` under `max_result_rows=13` fails with ClickHouse error 396. Re-measured the same way, +with `max_memory_usage=2000000000` added, on v26.11.0-rc.1 and again on v26.11.0-rc.2 (Linux +x86_64). **On v26.7.0 and v26.7.1-rc.1 it was silently inert**, if you are pointing the loader at one of those: settings in the connect argument vector never reached a session, so the same URL left @@ -190,6 +192,10 @@ Assert this at the end of a test suite. Every non-zero count is a `ResultSet`, ` `chdb_shutdown()` joins every engine thread, for a host that runs its own teardown — global destructors, a finalizing runtime, a sanitizer exit handler — that would otherwise race them. +On the pinned v26.11.0-rc.2 that means all of them, jemalloc's background threads included, +and it succeeds after `MergeTree` use as well. Through v26.11.0-rc.1 it returned 1 once a +`MergeTree` table had been used, and left jemalloc's threads running; see +[upstream findings §9](upstream-findings.md). ```java // Every Connection closed and every ResultSet closed first. @@ -197,8 +203,10 @@ int result = org.chdb.internal.ChdbNative.shutdown(); // 0 = stopped, 1 = something is still open, 2 = this engine has no chdb_shutdown ``` -Not needed for a process that simply exits: the threads are reaped by exit, as they always -were. The pinned 26.7.3 engine exports it, so 2 is what an older engine returns; see +A process that simply exits does not need to call it while the driver's shutdown hook is +installed, which is the default. A host that turns the hook off should close its connections +and call it before exiting, rather than leave the engine to tear itself down from its own exit +handlers with connections open. The pinned 26.11.0-rc.2 engine exports it, so 2 is what an older engine returns; see [upstream findings §6](upstream-findings.md). The driver's shutdown hook already calls it after closing the connections it knows about, so a host that leaves the hook installed does not need to. diff --git a/docs/publishing.md b/docs/publishing.md index 82fb295..30a4b4c 100644 --- a/docs/publishing.md +++ b/docs/publishing.md @@ -252,7 +252,8 @@ Apache-2.0, `LICENSE` in the repository, declared in the POM. Nothing to do. ### The redistributed engine Each platform package ships a ~326 MB `libchdb.so` verbatim from a chdb-core release. It -statically links ClickHouse and **968 third-party components**. +statically links ClickHouse and **1082 third-party components** (as of v26.11.0-rc.2, the same +as v26.11.0-rc.1; 968 through v26.7.3). That number, and the licence of each one, comes from the engine itself: @@ -277,24 +278,32 @@ The file is generated on whichever platform the person doing the bump has, but i on all four: `LicenseInventoryIT` runs in every platform job and queries that job's own engine, so a component set that differs between platforms fails CI rather than shipping. -Done twice so far, and both times the inventory came out **byte-identical** to its predecessor -— same 968 entries, same licence strings, same SHA-256 for v26.7.0, v26.7.2-rc.2 and v26.7.3 -alike — so the redistribution position has not moved, and the count above still describes the -engine we ship. The twelve copyleft components below are still exactly twelve. That is the -expected shape of a patch-level bump, not something to rely on: the whole point of keying the -file by version is that the next one may differ, which is why the file is regenerated and +The first two times, the inventory came out **byte-identical** to its predecessor — same 968 +entries, same licence strings, same SHA-256 for v26.7.0, v26.7.2-rc.2 and v26.7.3 alike. That +is the expected shape of a patch-level bump, not something to rely on: the whole point of keying +the file by version is that the next one may differ, which is why the file is regenerated and compared rather than copied forward. +The third, for v26.11.0-rc.1 — a move to the ClickHouse 26.11 baseline — did differ: 1082 +entries, 138 added and 24 removed. Every added entry is under a permissive licence (MIT, +Apache-2.0, BSD, ISC, 0BSD, or a disjunction offering one of those), so nothing joined the +copyleft set. One left it: `numactl` (LGPL), because chdb-core no longer has `contrib/numactl` +at all. The copyleft set below is therefore eleven, down from twelve. + +The fourth, for v26.11.0-rc.2 — chdb-core #312 on the same ClickHouse baseline — came out +byte-identical to v26.11.0-rc.1's again: the same 1082 entries and the same SHA-256, regenerated +from the new engine rather than copied. + ### The one open question Reading the inventory rather than guessing at it: most components are permissive, and several that a filename scan calls GPL are dual licensed with the permissive half in force — `zstd` is BSD-3, `rocksdb` is Apache-2.0, `liburing` is MIT, `ittapi` is `GPL-2.0-only OR BSD-3-Clause`. -Twelve carry a copyleft licence with no permissive alternative, in two families: +Eleven carry a copyleft licence with no permissive alternative, in two families: ``` -lemmagen-c libgsasl libssh mariadb-connector-c numactl xz (LGPL) +lemmagen-c libgsasl libssh mariadb-connector-c xz (LGPL) cbindgen defer-drop fortanix-sgx-abi shuffling-allocator timer webpki-roots (MPL-2.0) ``` @@ -306,8 +315,8 @@ relinking requirement, so the obligation is to offer the source of any modified Several of the MPL components are plainly build-time Rust tooling — `cbindgen` generates headers, `fortanix-sgx-abi` is for SGX enclaves — and are unlikely to be in a chDB build at -all. But *unlikely* is not *established*, which is the same problem as with the LGPL six: -whether any of the twelve is actually in the binary cannot be settled from the binary. It is +all. But *unlikely* is not *established*, which is the same problem as with the LGPL five: +whether any of the eleven is actually in the binary cannot be settled from the binary. It is stripped to 582 dynamic symbols and links statically. `nm` finds no `ssh_`, `mysql_`, `numa_`, `lzma_` or `gsasl_` symbols, which proves nothing either way. That question belongs to the engine build configuration. @@ -317,14 +326,15 @@ and npm by chdb-io. Whatever notice and offer-of-source obligations attach, atta So the task is to **inherit and verify**, not to derive an answer here: 1. Ask chdb-core maintainers for the notice bundle their PyPI and npm releases ship, and the - position taken on the six LGPL components. If there is one, mirror it. + position taken on the five LGPL components. If there is one, mirror it. 2. If there is not, that is a finding about all three distributions, and should be raised as such rather than solved inside this repository. -`LicenseInventoryIT.copyleftComponentsAreTheKnownSet` pins the set to exactly those twelve, so a -thirteenth appearing in a future engine fails CI rather than shipping unnoticed. It matches a -copyleft *family* pattern — AGPL, GPL, LGPL, MPL, EPL, CDDL, CPL, OSL, SSPL, EUPL, CeCILL, QPL — -and then subtracts an explicit allowlist of dual-licensed strings, so a new component under a +`LicenseInventoryIT.copyleftComponentsAreTheKnownSet` pins the set to exactly those eleven, so a +twelfth appearing in a future engine fails CI rather than shipping unnoticed — as does one +leaving, which is how `numactl`'s removal surfaced. It matches a copyleft *family* pattern — +AGPL, GPL, LGPL, MPL, EPL, CDDL, CPL, OSL, SSPL, EUPL, CeCILL, QPL — and then subtracts an +explicit allowlist of dual-licensed strings, so a new component under a licence nobody here anticipated is caught rather than ignored. An earlier version asked only for `license_type IN ('LGPL', 'GPL')` and silently missed the six MPL-2.0 components that were already there. @@ -379,7 +389,7 @@ Each step can invalidate the next, so: | `com.clickhouse.chdb` namespace permission | ClickHouse Central workspace admin | required before stable release | | Sonatype account and portal token | any maintainer | no | | A publishing-limit exception | Sonatype support | yes, if the numbers need it | -| **Position on the twelve copyleft components** | **chdb-io / ClickHouse legal** | **yes — the only real gate** | +| **Position on the eleven copyleft components** | **chdb-io / ClickHouse legal** | **yes — the only real gate** | | Whether chDB is "commercial" for Central | whoever owns the Sonatype relationship | yes | --- diff --git a/docs/release-readiness.md b/docs/release-readiness.md index 833e71a..26575aa 100644 --- a/docs/release-readiness.md +++ b/docs/release-readiness.md @@ -340,8 +340,9 @@ statically links the ClickHouse tree. contrib submodules by scanning their licence files and found seven LGPL and eight GPL. That method has since been replaced by querying the binary we actually ship — `SELECT DISTINCT library_name, license_type FROM system.licenses`, which ClickHouse generates -at build time — and the answer is 968 components, of which twelve carry a copyleft licence -with no permissive alternative, in two families rather than one. A filename scan calls every +at build time — and the answer is 1082 components on v26.11.0-rc.1 and v26.11.0-rc.2 (968 through v26.7.3), of +which eleven carry a copyleft licence with no permissive alternative, in two families rather +than one. A filename scan calls every dual-licensed component GPL and describes a source checkout rather than an artifact, so the older numbers should not be reasoned from; the result is committed at `licenses/engine-third-party-.tsv`, shipped in the package, and guarded by @@ -379,7 +380,7 @@ the inventory as a gap and estimated half a day for it; it is done, and | Generating and publishing a GPG key | any maintainer | no | | `org.chdb` namespace claim | whoever runs `chdb.org` DNS | automatic once the TXT record is up | | Shipping the engine's licence inventory | already done | no | -| **Whether redistributing `libchdb.so` under Apache-2.0 discharges the obligations of the twelve copyleft components** | **chdb-io / ClickHouse legal** | **yes, and it is the only real gate in this track** | +| **Whether redistributing `libchdb.so` under Apache-2.0 discharges the obligations of the eleven copyleft components** | **chdb-io / ClickHouse legal** | **yes, and it is the only real gate in this track** | | Whether chDB counts as "commercial nature" for Central | whoever owns the Sonatype relationship | yes | --- diff --git a/docs/unsupported.md b/docs/unsupported.md index 8081bd4..9dc39d0 100644 --- a/docs/unsupported.md +++ b/docs/unsupported.md @@ -273,11 +273,13 @@ never ambiguous. The calendar is accepted and ignored. `getObject(column, Instan the instant when that is what is wanted. **Stop your query threads before the JVM exits.** The driver installs a shutdown hook that -closes connections the application forgot, which covers a leaked result set: without it, a JVM -exiting with a streaming `ResultSet` open aborts inside the engine (SIGABRT, exit 134) rather -than exiting. Having closed them it calls `chdb_shutdown()`, which joins the engine's threads -so the host's own native teardown does not race them. Disable both with -`-Dchdb.shutdownHook=false` if the host manages its own teardown. +closes connections the application forgot, including a leaked result set, and having closed +them calls `chdb_shutdown()`, which joins the engine's threads so the host's own native +teardown does not race them. Disable both with `-Dchdb.shutdownHook=false` if the host manages +its own teardown. A JVM exiting with a streaming `ResultSet` open used to abort without the hook +(SIGABRT, exit 134); that was the JNI shim closing the leaked handles from a static destructor +inside `exit()`, and it no longer does, so with the hook off they are left to the engine's own +exit teardown. One consequence worth knowing: `chdb_connect()` fails once the hook has run, because `chdb_shutdown()` closes the engine for the rest of the process. The JVM runs shutdown hooks diff --git a/docs/upstream-findings.md b/docs/upstream-findings.md index 962ad6c..66a1a39 100644 --- a/docs/upstream-findings.md +++ b/docs/upstream-findings.md @@ -5,7 +5,7 @@ arm64 while implementing work-plan phases 0–8 against what was then the pinned **v26.7.0**. They are recorded here because every one of them is a decision the driver's code depends on, and because several belong upstream rather than in a Java driver. -The baseline has since moved twice. First to **v26.7.2-rc.2** (issue #8, for +The baseline has since moved four times. First to **v26.7.2-rc.2** (issue #8, for `chdb_shutdown()`), and four of these entries changed with it rather than being carried over: - **§2 was wrong about who was at fault** and is rewritten. The released header was always @@ -29,6 +29,20 @@ stable too — which closed the oldest entry here: repair, and `measure` reports zero. §2's table also gained a third column, because the release re-demonstrated the vendoring rule it records. +Then to **v26.11.0-rc.1**, a chdb-core pre-release on the ClickHouse 26.11 baseline, pinned to +validate it ahead of the stable v26.11.1. Nothing here changed status with it, but two entries +gained a row: + +- **§2's table gained a fourth column**: the in-tree constant at the tag says `26.11.0-dev`. +- **§9 gained a note** on `chdb_shutdown()` after `MergeTree` use, which this engine now + reports on stderr where v26.7.3 refused silently. + +Then to **v26.11.0-rc.2**, the same baseline plus chdb-core #312: + +- **§2's table gained a fifth column**, and the in-tree constant still says `26.11.0-dev`. +- **§9's `MergeTree` note is fixed upstream**: `chdb_shutdown()` returns 0 after `MergeTree` + use once every connection is closed, and it now stops jemalloc's background threads too. + The rest still hold on the new engine, and the tests named against each are what demonstrates that — they run in `mvn verify` against whichever engine is pinned. @@ -201,13 +215,13 @@ inverted. `chdb.h` exists in two places and they do not agree: -| | v26.7.0 | v26.7.2-rc.2 | v26.7.3 | -|---|---|---|---| -| `programs/local/chdb.h` at the git tag | `26.5.1-rc.3` | `26.7.2` | `26.7.2` | -| `chdb.h` inside the release tarball | `26.7.0` | `26.7.2-rc.2` | `26.7.3` | -| `chdb_version()` from that tarball's library | `26.7.0` | `26.7.2-rc.2` | `26.7.3` | +| | v26.7.0 | v26.7.2-rc.2 | v26.7.3 | v26.11.0-rc.1 | v26.11.0-rc.2 | +|---|---|---|---|---|---| +| `programs/local/chdb.h` at the git tag | `26.5.1-rc.3` | `26.7.2` | `26.7.2` | `26.11.0-dev` | `26.11.0-dev` | +| `chdb.h` inside the release tarball | `26.7.0` | `26.7.2-rc.2` | `26.7.3` | `26.11.0-rc.1` | `26.11.0-rc.2` | +| `chdb_version()` from that tarball's library | `26.7.0` | `26.7.2-rc.2` | `26.7.3` | `26.11.0-rc.1` | `26.11.0-rc.2` | -Three releases, three disagreements, and the v26.7.3 column is the cleanest demonstration yet: +Five releases, five disagreements, and the v26.7.3 column is the cleanest demonstration yet: the in-tree constant did not move at all between v26.7.2-rc.2 and v26.7.3, so a header vendored from the git tag would have declared `26.7.2` for an engine whose `chdb_version()` returns `26.7.3` — a mismatch the loader refuses. Vendoring from the tarball is therefore not a @@ -219,7 +233,7 @@ tag v26.7.0, stale constant included, rather than to the header inside the relea **Consequence for this binding:** `chdb-jni/include/chdb.h` is now taken from the release tarball, which is the artifact this binding is built beside and ships against, and -`shim.built.against.engine.header` reads `26.7.3` accordingly. The rule is recorded in +`shim.built.against.engine.header` reads `26.11.0-rc.2` accordingly. The rule is recorded in `chdb-jni/CMakeLists.txt` where the vendored header is included: copy it from the tarball, not from the source tree, and do not edit it — its value is being byte-identical to what upstream shipped, which is what makes the next comparison able to detect drift. This finding was made @@ -351,8 +365,9 @@ recognize. Validating values without validating names catches the rarer mistake. **Severity: expected; still handled as optional symbols.** -Neither is in v26.7.0 or v26.7.1-rc.1. Both are in v26.7.2-rc.2, and in v26.7.3, which is now -the baseline. +Neither is in v26.7.0 or v26.7.1-rc.1. Both are in v26.7.2-rc.2, in v26.7.3, in v26.11.0-rc.1 +and in v26.11.0-rc.2, which is now the baseline — exported by all four of its platform +libraries. Checked in the release library rather than in the source's export list, because the two are not the same claim: @@ -516,7 +531,8 @@ are now pinned to the same table, in `ArrowFieldTypeTest.unsupportedFormats` and ## 9. `chdb_shutdown()` cannot make an unclean exit clean -**Severity: the exit-time abort stays a driver problem. Not worked around; needs either an +**Severity: the exit-time abort with a stream open was the driver's own, and is fixed in the +shim. Exiting with a query still running is not reachable from the driver; needs either an upstream change or an accepted limitation.** Issue #8 moved the baseline to v26.7.2-rc.2 to get `chdb_shutdown()`, on the expectation that @@ -540,6 +556,44 @@ it has already done the hard part. Measured on macOS arm64, a JVM that leaks a s The third row is what the driver's hook now does: drain the connection registry, then call it. The second row is why the registry could not be deleted. +**The 134 in the first two rows was the shim's doing, at least on Linux x86_64**, where the +same exit is a SIGSEGV rather than the libc++ assertion. gdb puts it in `chdb_close_conn()`, +called from the shim's own `HandleRegistry` destructor inside `exit()`. The registry was a +function-local static, constructed at the first connect, so its destructor ran after the +statics the engine constructs during the first query were already destroyed — and it closed +every handle still registered, the leaked stream and its connection included. The same +sequence in plain C reproduces it: register an exit handler that destroys the stream and closes +the connection, then start a streaming query and fetch one chunk, and the process dies with +SIGSEGV on every run (v26.11.0-rc.1 and rc.2); register the handler after the query, or leave +the handles open, and it exits 0. The registry is never destroyed now, so with the hook off the +leaked handles are left to the engine's exit teardown: 20 of 20 runs exit 0 on v26.11.0-rc.2, +against 20 of 20 crashes before, and `ProcessLifecycleIT.hookCanBeDisabled` asserts the clean +exit on every platform CI runs. The hook is kept, because closing the connections is still what +lets `chdb_shutdown()` join the engine's threads. + +Through v26.11.0-rc.1 the third row held only while no `MergeTree` table had been used. +Measured on Linux x86_64 through the C API alone — connect, create a `MergeTree` table, insert, +close the connection, call `chdb_shutdown()` — it returned 1 (`CHDBError`) on both v26.7.3 and +v26.11.0-rc.1, with every connection closed. v26.7.3 refused silently; v26.11.0-rc.1 said why +on stderr: + +``` +chDB global pool shutdown refused: active jobs now=5; live local pool workers=[MergeTreeBackgroundExecutorThreadsx5] +chDB shutdown failed: global thread pool did not become idle +``` + +So a JVM that used a `MergeTree` table printed those two lines when the driver's hook ran. The +exit code did not change — the hook ignores the result, as it always has — and the same +`Memory` or `numbers()` workload returned 0 on both engines. + +**Fixed in v26.11.0-rc.2** by chdb-core #312, which destroys the `MergeTree` background +executors on shutdown: the same sequence returns 0 and prints nothing, and +`ProcessLifecycleIT.chdbShutdownSucceedsAfterMergeTree` asserts it. The same release stops +jemalloc's background threads in `chdb_shutdown()`, so the ordering the call is kept for below +now covers every engine thread. Measured on Linux x86_64 by listing the JVM's threads after a +successful call: v26.11.0-rc.1 left four unnamed engine threads running, v26.11.0-rc.2 leaves +none; after `MergeTree` use rc.1 refused and left all of them. + What the call buys, measured, is nothing an exit code can see: every shape tried came out identical with and without it, six runs each. It is kept because the ordering it guarantees — no engine thread alive when the host proceeds to its own native teardown — is real even where diff --git a/docs/v1-progress.md b/docs/v1-progress.md index 8fe1baa..f095b04 100644 --- a/docs/v1-progress.md +++ b/docs/v1-progress.md @@ -13,18 +13,30 @@ macOS arm64 and x86_64 — each running the full suite on **Java 11, 17, 21 and sanitizer runs on one Linux and one macOS toolchain. Sixteen platform-and-JDK combinations, all green. -The baseline has since moved twice, to **engine 26.7.2-rc.2** (issue #8) and then to **engine -26.7.3**. Neither run has happened yet: both moves were verified on macOS arm64 only, so the -sixteen-way result above describes 26.7.0 and the three other platforms are unverified on the -current engine until CI says otherwise. +The baseline has since moved four times, to **engine 26.7.2-rc.2** (issue #8), then to +**engine 26.7.3**, to **engine 26.11.0-rc.1**, and now to **engine 26.11.0-rc.2**. The first two +moves were verified on macOS arm64 only; the two 26.11 moves were verified locally on Linux +x86_64 only. So the sixteen-way result above describes 26.7.0, and the other platforms are +unverified on the current engine until CI says otherwise. -26.7.3 is a **stable** chdb-core release, which clears the [work plan §4.3 +26.7.3 is a **stable** chdb-core release, which cleared the [work plan §4.3 ](../CHDB_JAVA_V1_WORK_PLAN.md) bar that 26.7.2-rc.2 could not: a binding built on an engine pre-release is not suitable for V1 GA, so the RC baseline was itself a release blocker. It also carries chdb-core #224, the fix for the signal-handler window reported as chdb-core #221 — `scripts/run-signal-window-test.sh measure` reports zero on it, against 688, 613 and 724 on 26.7.2-rc.2. +26.11.0-rc.1 is a chdb-core **pre-release** again, pinned to validate the ClickHouse 26.11 +baseline ahead of the stable v26.11.1, so the same §4.3 rule applies to it: only `-rc.` +versions can be cut while it is the baseline, and the stable release has to be pinned before +`1.0.0`. The signal-handler fix holds on it — `measure` reports zero and `stress` survives 6 of +6 on Linux x86_64. + +26.11.0-rc.2 is the same baseline plus chdb-core #312, a pre-release too, so nothing about +§4.3 changes: the next cut from it is `1.0.0-rc.2`, `1.0.0-rc.1` stays on 26.7.3, and v26.11.1 +has to be pinned before `1.0.0`. The signal-handler fix holds on it too: `measure` reports +zero and `stress` survives 6 of 6 on Linux x86_64. + --- ## Phase 0 — Freeze V1 decisions and upstream dependencies @@ -36,7 +48,7 @@ chdb-core #221 — `scripts/run-signal-window-test.sh measure` reports zero on i | ✅ | Four glibc/macOS platforms | `Platform`, with musl detected and refused | | ✅ | Direct JNI is the mainline, ADBC the experiment | no Arrow Java dependency anywhere | | ✅ | Engine release, dynamic-library checksum and symbol set pinned | `scripts/engine.properties`, SHA-256 per platform from the GitHub release digests | -| ✅ | Consistency check across `chdb_version()`, tag and header version | all three agree on v26.7.3. The `26.5.1-rc.3` constant blamed on upstream turned out to be ours: the vendored header had been copied from chdb-core's source tree instead of its release tarball — [findings §2](upstream-findings.md). The v26.7.3 bump re-confirmed that rule the hard way: `programs/local/chdb.h` at the git tag still says `26.7.2`, while the header in the release tarball says `26.7.3`. Still enforced against `engine.properties` rather than the header | +| ✅ | Consistency check across `chdb_version()`, tag and header version | all three agree on v26.11.0-rc.2. The `26.5.1-rc.3` constant blamed on upstream turned out to be ours: the vendored header had been copied from chdb-core's source tree instead of its release tarball — [findings §2](upstream-findings.md). The v26.7.3 bump re-confirmed that rule the hard way: `programs/local/chdb.h` at the git tag still says `26.7.2`, while the header in the release tarball says `26.7.3`; at the v26.11.0-rc.1 tag it says `26.11.0-dev`. Still enforced against `engine.properties` rather than the header | | ✅ | C API split into required and optional symbols | 18 required, linker- and load-checked; `chdb_classify_query_n` and `chdb_shutdown` optional via `dlsym`, and present on the current baseline | | ⬜ | C ABI version and compatibility promise confirmed with Core | needs upstream agreement | | ✅ | Signal-handler requirement raised upstream | reproduced, measured and written up in [findings §1](upstream-findings.md), filed as chdb-core #221, and fixed by chdb-core #224 in engine v26.7.3 — the shim's guard now reports no handler to repair, and `run-signal-window-test.sh measure` reports zero | diff --git a/licenses/engine-third-party-26.11.0-rc.1.tsv b/licenses/engine-third-party-26.11.0-rc.1.tsv new file mode 100644 index 0000000..c995060 --- /dev/null +++ b/licenses/engine-third-party-26.11.0-rc.1.tsv @@ -0,0 +1,1082 @@ +abseil-cpp Apache +addr2line Apache-2.0 OR MIT +adler2 0BSD OR MIT OR Apache-2.0 +aead MIT OR Apache-2.0 +aes MIT OR Apache-2.0 +aes-gcm Apache-2.0 OR MIT +ahash MIT OR Apache-2.0 +aho-corasick Unlicense OR MIT +ai-sdk-cpp Apache +alloc-no-stdlib BSD-3-Clause +alloc-stdlib BSD-3-Clause +alloca MIT +allocator-api2 MIT OR Apache-2.0 +alp Apache-2.0 +ambient-authority Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +AMQP-CPP Apache +android_system_properties MIT OR Apache-2.0 +android_system_properties MIT/Apache-2.0 +anes MIT OR Apache-2.0 +anstream MIT OR Apache-2.0 +anstyle MIT OR Apache-2.0 +anstyle-parse MIT OR Apache-2.0 +anstyle-query MIT OR Apache-2.0 +anstyle-wincon MIT OR Apache-2.0 +antlr4-cpp-runtime BSD 2-clause +anyhow MIT OR Apache-2.0 +approx Apache-2.0 +ar_archive_writer Apache-2.0 WITH LLVM-exception +arbitrary MIT OR Apache-2.0 +arboard MIT OR Apache-2.0 +arbtest MIT OR Apache-2.0 +arc-swap MIT OR Apache-2.0 +arcref MIT +ariadne MIT +arrayref BSD-2-Clause +arrayvec MIT OR Apache-2.0 +arrow Apache +arrow Apache-2.0 +arrow-arith Apache-2.0 +arrow-array Apache-2.0 +arrow-array Apache-2.0 AND MIT +arrow-buffer Apache-2.0 +arrow-cast Apache-2.0 +arrow-csv Apache-2.0 +arrow-data Apache-2.0 +arrow-ipc Apache-2.0 +arrow-json Apache-2.0 +arrow-ord Apache-2.0 +arrow-row Apache-2.0 +arrow-schema Apache-2.0 +arrow-select Apache-2.0 +arrow-string Apache-2.0 +ascii Apache-2.0 OR MIT +async-channel Apache-2.0 OR MIT +async-executor Apache-2.0 OR MIT +async-fs Apache-2.0 OR MIT +async-io Apache-2.0 OR MIT +async-lock Apache-2.0 OR MIT +async-net Apache-2.0 OR MIT +async-process Apache-2.0 OR MIT +async-signal Apache-2.0 OR MIT +async-stream MIT +async-stream-impl MIT +async-task Apache-2.0 OR MIT +async-trait MIT OR Apache-2.0 +atoi MIT +atomic-waker Apache-2.0 OR MIT +autocfg Apache-2.0 OR MIT +avro Apache +aws Apache +aws-c-auth Apache +aws-c-cal Apache +aws-c-common Apache +aws-c-compression Apache +aws-c-event-stream Apache +aws-c-http Apache +aws-c-io Apache +aws-c-mqtt Apache +aws-c-s3 Apache +aws-c-sdkutils Apache +aws-checksums Apache +aws-crt-cpp Apache +aws-lc-rs ISC AND (Apache-2.0 OR ISC) +aws-lc-sys ISC AND (Apache-2.0 OR ISC) AND Apache-2.0 AND MIT AND BSD-3-Clause AND (Apache-2.0 OR ISC OR MIT) AND (Apache-2.0 OR ISC OR MIT-0) +aws-lc-sys ISC AND (Apache-2.0 OR ISC) AND OpenSSL +axum MIT +axum-core MIT +azure MIT +backtrace MIT OR Apache-2.0 +base64 MIT OR Apache-2.0 +base64ct Apache-2.0 OR MIT +bech32 MIT +beef MIT OR Apache-2.0 +better_io Apache-2.0 +bincode MIT +bindgen BSD-3-Clause +bit-set Apache-2.0 OR MIT +bit-vec Apache-2.0 OR MIT +bitflags MIT OR Apache-2.0 +bitflags MIT/Apache-2.0 +bitvec MIT +blake3 CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception +block-buffer MIT OR Apache-2.0 +block-padding MIT OR Apache-2.0 +blocking Apache-2.0 OR MIT +boost Boost +brotli BSD-3-Clause AND MIT +brotli MIT +brotli-decompressor BSD-3-Clause/MIT +bs-thread-pool MIT +bstr MIT OR Apache-2.0 +bumpalo MIT OR Apache-2.0 +by_address MIT OR Apache-2.0 +bytemuck Zlib OR Apache-2.0 OR MIT +byteorder Unlicense OR MIT +bytes MIT +bytesize Apache-2.0 +bzip2 MIT/Apache-2.0 +bzip2 bzip2 +bzip2-sys MIT/Apache-2.0 +c-ares MIT +camino MIT OR Apache-2.0 +cap-fs-ext Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +cap-net-ext Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +cap-primitives Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +cap-std Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +cap-time-ext Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +capnproto MIT +capstone MIT +capstone-sys MIT +cargo-platform MIT OR Apache-2.0 +cargo_metadata MIT +cast MIT OR Apache-2.0 +castaway MIT +cbc MIT OR Apache-2.0 +cbindgen MPL-2.0 +cc MIT OR Apache-2.0 +cccl Apache +cctz Apache +cexpr Apache-2.0/MIT +cfg-if MIT OR Apache-2.0 +cfg-if MIT/Apache-2.0 +cfg_aliases MIT +chacha20 MIT OR Apache-2.0 +chdig MIT +chrono MIT OR Apache-2.0 +chrono-tz MIT OR Apache-2.0 +chrono-tz-build MIT OR Apache-2.0 +chumsky MIT +chunked_transfer MIT OR Apache-2.0 +ciborium Apache-2.0 +ciborium-io Apache-2.0 +ciborium-ll Apache-2.0 +cipher MIT OR Apache-2.0 +cityhash-rs MIT OR Apache-2.0 +cityhash102 MIT +clang-sys Apache-2.0 +clap MIT OR Apache-2.0 +clap_builder MIT OR Apache-2.0 +clap_complete MIT OR Apache-2.0 +clap_derive MIT OR Apache-2.0 +clap_lex MIT OR Apache-2.0 +cld2 Apache +clickhouse MIT OR Apache-2.0 +clickhouse-derive MIT OR Apache-2.0 +clickhouse-rs-1.1.0 MIT +clickhouse-rs-cityhash-sys MIT +clickstack MIT +clipboard-win BSL-1.0 +cmake MIT OR Apache-2.0 +cobs MIT OR Apache-2.0 +codespan-reporting Apache-2.0 +colorchoice MIT OR Apache-2.0 +combine MIT +comfy-table MIT +compact_str MIT +concurrent-queue Apache-2.0 OR MIT +console-api MIT +console-subscriber MIT +const-random MIT OR Apache-2.0 +const-random-macro MIT OR Apache-2.0 +const_for MIT +constant_time_eq CC0-1.0 +constant_time_eq CC0-1.0 OR MIT-0 OR Apache-2.0 +convert_case MIT +core-foundation MIT OR Apache-2.0 +core-foundation-sys MIT OR Apache-2.0 +corrosion MIT +cpp_demangle MIT OR Apache-2.0 +cppkafka BSD 2-clause +cpufeatures MIT OR Apache-2.0 +crc MIT OR Apache-2.0 +crc-catalog MIT OR Apache-2.0 +crc32-s390x Apache +crc32-vpmsum Apache +crc32c BSD 3-clause +crc32fast MIT OR Apache-2.0 +criterion Apache-2.0 OR MIT +criterion-plot Apache-2.0 OR MIT +criterion-plot MIT/Apache-2.0 +critical-section MIT OR Apache-2.0 +croaring Apache +crossbeam MIT OR Apache-2.0 +crossbeam-channel MIT OR Apache-2.0 +crossbeam-deque MIT OR Apache-2.0 +crossbeam-epoch MIT OR Apache-2.0 +crossbeam-queue MIT OR Apache-2.0 +crossbeam-utils MIT OR Apache-2.0 +crossterm MIT +crossterm_winapi MIT +crunchy MIT +crypto-common MIT OR Apache-2.0 +csv Unlicense/MIT +csv-core Unlicense/MIT +ctr MIT OR Apache-2.0 +cty MIT OR Apache-2.0 +cucascade Apache +cuCollections Apache +cudf Apache +custom-labels Apache-2.0 +cxx MIT OR Apache-2.0 +cxx-build MIT OR Apache-2.0 +cxxbridge-cmd MIT OR Apache-2.0 +cxxbridge-flags MIT OR Apache-2.0 +cxxbridge-macro MIT OR Apache-2.0 +cyrus-sasl BSD 2-clause +darling MIT +darling_core MIT +darling_macro MIT +darts-clone BSD +dashmap MIT +datasketches-cpp Apache +datatest-stable MIT OR Apache-2.0 +debugid Apache-2.0 +defer-drop MPL-2.0 +defmt MIT OR Apache-2.0 +defmt-macros MIT OR Apache-2.0 +defmt-parser MIT OR Apache-2.0 +delta-kernel-rs Apache +der Apache-2.0 OR MIT +deranged MIT OR Apache-2.0 +derive_arbitrary MIT/Apache-2.0 +derive_builder MIT OR Apache-2.0 +derive_builder_core MIT OR Apache-2.0 +derive_builder_macro MIT OR Apache-2.0 +derive_more MIT +derive_more-impl MIT +des MIT OR Apache-2.0 +dhat MIT OR Apache-2.0 +diff MIT OR Apache-2.0 +digest MIT OR Apache-2.0 +directories-next MIT OR Apache-2.0 +dirs-next MIT OR Apache-2.0 +dirs-sys-next MIT OR Apache-2.0 +dispatch2 Zlib OR Apache-2.0 OR MIT +displaydoc MIT OR Apache-2.0 +dlmalloc MIT/Apache-2.0 +dlpack Apache +dmlc-core Apache +dns-lookup MIT/Apache-2.0 +document-features MIT OR Apache-2.0 +double-conversion BSD 3-clause +driftsort Apache +dtype_dispatch Apache-2.0 +dunce CC0-1.0 OR MIT-0 OR Apache-2.0 +dyn-clone MIT OR Apache-2.0 +easy-smt MIT OR Apache-2.0 +egg MIT +either MIT OR Apache-2.0 +embedded-io MIT OR Apache-2.0 +encoding_rs (Apache-2.0 OR MIT) AND BSD-3-Clause +enum-as-inner MIT/Apache-2.0 +enum-iterator 0BSD +enum-iterator-derive 0BSD +env_filter MIT OR Apache-2.0 +env_home MIT OR Apache-2.0 +env_logger MIT OR Apache-2.0 +equivalent Apache-2.0 OR MIT +errno MIT OR Apache-2.0 +error-code BSL-1.0 +escape8259 MIT +event-listener Apache-2.0 OR MIT +event-listener-strategy Apache-2.0 OR MIT +ext-trait Zlib OR MIT OR Apache-2.0 +ext-trait-proc_macros Zlib OR MIT OR Apache-2.0 +extension-traits Zlib OR MIT OR Apache-2.0 +fallible-iterator MIT/Apache-2.0 +fancy-regex MIT +fast_float MIT +fastlanes Apache-2.0 +fastops MIT +fastrand Apache-2.0 OR MIT +fd-lock MIT OR Apache-2.0 +file-per-thread-logger Apache-2.0 WITH LLVM-exception +filecheck Apache-2.0 WITH LLVM-exception +filedescriptor MIT +filetime MIT/Apache-2.0 +find-msvc-tools MIT OR Apache-2.0 +fixedbitset MIT/Apache-2.0 +flagset Apache-2.0 +flamelens MIT +flatbuffers Apache +flatbuffers Apache-2.0 +flate2 MIT OR Apache-2.0 +flexi_logger MIT OR Apache-2.0 +fmtlib MIT +fnv Apache-2.0 / MIT +foldhash Zlib +foreign-types MIT/Apache-2.0 +foreign-types-shared MIT/Apache-2.0 +form_urlencoded MIT OR Apache-2.0 +fortanix-sgx-abi MPL-2.0 +FP16 MIT +fs-set-times Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +fs_extra MIT +fslock MIT +fsst-rs Apache-2.0 +funty MIT +futures MIT OR Apache-2.0 +futures-channel MIT OR Apache-2.0 +futures-core MIT OR Apache-2.0 +futures-executor MIT OR Apache-2.0 +futures-io MIT OR Apache-2.0 +futures-lite Apache-2.0 OR MIT +futures-macro MIT OR Apache-2.0 +futures-sink MIT OR Apache-2.0 +futures-task MIT OR Apache-2.0 +futures-timer MIT/Apache-2.0 +futures-util MIT OR Apache-2.0 +fuzzy-matcher MIT +fxprof-processed-profile MIT OR Apache-2.0 +g2gen MIT/Apache-2.0 +g2p MIT/Apache-2.0 +g2poly MIT/Apache-2.0 +gdbstub MIT OR Apache-2.0 +gdbstub_arch MIT OR Apache-2.0 +gdeflate Apache +generic-array MIT +gethostname Apache-2.0 +getopts MIT OR Apache-2.0 +getrandom MIT OR Apache-2.0 +ghash Apache-2.0 OR MIT +gimli MIT OR Apache-2.0 +glob MIT OR Apache-2.0 +google-benchmark Apache +google-cloud-cpp Apache +google-protobuf BSD 3-clause +googletest BSD 3-clause +grpc Apache +gzip-header MIT/Apache-2.0 +h2 MIT +h3 Apache +half MIT OR Apache-2.0 +hashbrown MIT OR Apache-2.0 +hdfs-native Apache-2.0 +hdfs-native-object-store Apache-2.0 +hdrhistogram MIT/Apache-2.0 +heck MIT OR Apache-2.0 +heks MIT +hermit-abi MIT OR Apache-2.0 +hex MIT OR Apache-2.0 +hive-metastore Apache +hmac MIT OR Apache-2.0 +home MIT OR Apache-2.0 +hostname MIT +http MIT OR Apache-2.0 +http-body MIT +http-body-util MIT +httparse MIT OR Apache-2.0 +httpdate MIT OR Apache-2.0 +httpdate MIT/Apache-2.0 +humansize MIT/Apache-2.0 +humantime MIT OR Apache-2.0 +humantime MIT/Apache-2.0 +hyper MIT +hyper-rustls Apache-2.0 OR ISC OR MIT +hyper-timeout MIT OR Apache-2.0 +hyper-tls MIT/Apache-2.0 +hyper-util MIT +iana-time-zone MIT OR Apache-2.0 +iana-time-zone-haiku MIT OR Apache-2.0 +icu Public Domain +icu_collections Unicode-3.0 +icu_locale_core Unicode-3.0 +icu_locid Unicode-3.0 +icu_locid_transform Unicode-3.0 +icu_locid_transform_data Unicode-3.0 +icu_normalizer Unicode-3.0 +icu_normalizer_data Unicode-3.0 +icu_properties Unicode-3.0 +icu_properties_data Unicode-3.0 +icu_provider Unicode-3.0 +icu_provider_macros Unicode-3.0 +icudata Public Domain +id-arena MIT/Apache-2.0 +ident_case MIT/Apache-2.0 +idna MIT +idna MIT OR Apache-2.0 +idna_adapter Apache-2.0 OR MIT +indexmap Apache-2.0 OR MIT +indoc MIT OR Apache-2.0 +inout MIT OR Apache-2.0 +instability MIT +instant BSD-3-Clause +integer-encoding MIT +inventory MIT OR Apache-2.0 +io-extras Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +io-lifetimes Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +io-uring MIT OR Apache-2.0 +ipcrypt2 ISC +ipnet MIT OR Apache-2.0 +ipnsort Apache +is-terminal MIT +is_terminal_polyfill MIT OR Apache-2.0 +isa-l BSD 3-clause +itertools MIT OR Apache-2.0 +itertools MIT/Apache-2.0 +itoa MIT OR Apache-2.0 +ittapi GPL-2.0-only OR BSD-3-Clause +ittapi-sys GPL-2.0-only OR BSD-3-Clause +jemalloc BSD 2-clause +Jieba-CPP MIT +jiff Unlicense OR MIT +jiff-core Unlicense OR MIT +jiff-static Unlicense OR MIT +jiff-tzdb Unlicense OR MIT +jiff-tzdb-platform Unlicense OR MIT +jni MIT OR Apache-2.0 +jni-macros MIT OR Apache-2.0 +jni-sys MIT OR Apache-2.0 +jni-sys-macros MIT OR Apache-2.0 +jobserver MIT OR Apache-2.0 +js-sys MIT OR Apache-2.0 +json-from-wast Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +jwt-cpp MIT +kanal MIT +kasuari MIT OR Apache-2.0 +krb5 BSD +kvikio Apache +lasso MIT OR Apache-2.0 +lazy_static MIT OR Apache-2.0 +lazy_static MIT/Apache-2.0 +lazycell MIT/Apache-2.0 +leb128 Apache-2.0/MIT +leb128fmt MIT OR Apache-2.0 +lemmagen-c LGPL +lending-iterator Zlib OR MIT OR Apache-2.0 +lending-iterator-proc_macros Zlib OR MIT OR Apache-2.0 +lexical-core MIT/Apache-2.0 +lexical-parse-float MIT/Apache-2.0 +lexical-parse-integer MIT/Apache-2.0 +lexical-util MIT/Apache-2.0 +lexical-write-float MIT/Apache-2.0 +lexical-write-integer MIT/Apache-2.0 +libarchive Apache +libbcrypt Public Domain +libc MIT OR Apache-2.0 +libcotp Apache +libcpuid BSD 2-clause +libdeflate MIT +libdivide Boost +libfarmhash MIT +libfiu Public Domain +libfuzzer-sys (MIT OR Apache-2.0) AND NCSA +libgsasl LGPL +libhdfs3 Apache +libloading ISC +libm MIT +libmetrohash Apache +libpqxx BSD 3-clause +libprotobuf-mutator Apache +librdkafka Apache +libredox MIT +librseq BSD +librtcx Apache +libssh LGPL +libstemmer_c BSD 3-clause +libtest-mimic MIT/Apache-2.0 +libucontext ISC +liburing MIT +libuv BSD +libxml2 MIT +line-clipping MIT OR Apache-2.0 +link-cplusplus MIT OR Apache-2.0 +linux-raw-sys Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +listenfd Apache-2.0 +litemap Unicode-3.0 +litrs MIT OR Apache-2.0 +llvm-project Apache +lock_api MIT OR Apache-2.0 +log MIT OR Apache-2.0 +logos MIT OR Apache-2.0 +logos-codegen MIT OR Apache-2.0 +logos-derive MIT OR Apache-2.0 +lru MIT +lru-slab MIT OR Apache-2.0 OR Zlib +lz4 BSD +lz4 MIT +lz4-sys-1.11.1+lz4 MIT +lz4_flex MIT +mach2 BSD-2-Clause OR MIT OR Apache-2.0 +macro-string MIT OR Apache-2.0 +macro_rules_attribute MIT +macro_rules_attribute-proc_macro MIT +magic_enum MIT +managed 0BSD +mapbox-geometry ISC +mariadb-connector-c LGPL +match_cfg MIT/Apache-2.0 +matchers MIT +matchit MIT AND BSD-3-Clause +matrixmultiply MIT/Apache-2.0 +maybe-owned MIT OR Apache-2.0 +md-5 MIT OR Apache-2.0 +MeCab BSD +memchr Unlicense OR MIT +memfd MIT OR Apache-2.0 +memmap2 MIT OR Apache-2.0 +memmap2 MIT/Apache-2.0 +mime MIT OR Apache-2.0 +minimal-lexical MIT/Apache-2.0 +miniselect Boost +miniz_oxide MIT OR Zlib OR Apache-2.0 +minizip-ng zLib +mintex Apache-2.0 +mio MIT +moka (MIT OR Apache-2.0) AND Apache-2.0 +mongo-c-driver Apache +mongo-cxx-driver Apache +morton-nd MIT +moto-rt MIT OR Apache-2.0 +msgpack-c Boost +murmurhash Public Domain +musl Public Domain +mutatis MIT OR Apache-2.0 +mutatis-derive MIT OR Apache-2.0 +nanoarrow Apache +native-tls MIT OR Apache-2.0 +nats-io Apache +ndarray MIT OR Apache-2.0 +never-say-never Zlib OR MIT OR Apache-2.0 +nix MIT +nlohmann-json MIT +nom MIT +nougat Zlib OR MIT OR Apache-2.0 +nougat-proc_macros Zlib OR MIT OR Apache-2.0 +nu-ansi-term MIT +num-bigint MIT OR Apache-2.0 +num-complex MIT OR Apache-2.0 +num-conv MIT OR Apache-2.0 +num-integer MIT OR Apache-2.0 +num-traits MIT OR Apache-2.0 +num_cpus MIT OR Apache-2.0 +num_enum BSD-3-Clause OR MIT OR Apache-2.0 +num_enum_derive BSD-3-Clause OR MIT OR Apache-2.0 +num_threads MIT OR Apache-2.0 +NuRaft Apache +nvtx Apache +objc2 MIT +objc2-app-kit Zlib OR Apache-2.0 OR MIT +objc2-core-foundation Zlib OR Apache-2.0 OR MIT +objc2-core-graphics Zlib OR Apache-2.0 OR MIT +objc2-encode MIT +objc2-foundation MIT +objc2-io-surface Zlib OR Apache-2.0 OR MIT +object Apache-2.0 OR MIT +object_store MIT/Apache-2.0 +ocaml-boxroot-sys MIT +ocaml-interop MIT +ocaml-sys ISC +once_cell MIT OR Apache-2.0 +once_cell_polyfill MIT OR Apache-2.0 +oneshot MIT OR Apache-2.0 +onig MIT +onig_sys MIT +onpair Apache-2.0 +oorandom MIT +opaque-debug MIT OR Apache-2.0 +openldap OpenLDAP Version 2.8 +openssl Apache +openssl Apache-2.0 +openssl-macros MIT/Apache-2.0 +openssl-probe MIT OR Apache-2.0 +openssl-probe MIT/Apache-2.0 +openssl-sys MIT +openvino Apache-2.0 +openvino-finder Apache-2.0 +openvino-sys Apache-2.0 +optimized-routines Apache +ordered-float MIT +ort-2.0.0 MIT OR Apache-2.0 +ort-sys-2.0.0 MIT OR Apache-2.0 +page_size MIT/Apache-2.0 +palette MIT OR Apache-2.0 +palette_derive MIT OR Apache-2.0 +palette_math MIT OR Apache-2.0 +parking Apache-2.0 OR MIT +parking_lot MIT OR Apache-2.0 +parking_lot_core MIT OR Apache-2.0 +parquet Apache-2.0 +parquet-testing Apache +parse-zoneinfo MIT +password-hash MIT OR Apache-2.0 +paste MIT OR Apache-2.0 +pastey MIT OR Apache-2.0 +pbkdf2 MIT OR Apache-2.0 +pco Apache-2.0 +pcodec Apache +pdqsort zLib +pem-rfc7468 Apache-2.0 OR MIT +percent-encoding MIT OR Apache-2.0 +perfetto_protos Apache-2.0 +petgraph MIT OR Apache-2.0 +phf MIT +phf_codegen MIT +phf_generator MIT +phf_shared MIT +pin-project Apache-2.0 OR MIT +pin-project-internal Apache-2.0 OR MIT +pin-project-lite Apache-2.0 OR MIT +pin-utils MIT OR Apache-2.0 +piper MIT OR Apache-2.0 +pkg-config MIT OR Apache-2.0 +plain MIT/Apache-2.0 +plotters MIT +plotters-backend MIT +plotters-svg MIT +pocketfft BSD 3-clause +poco Boost +polling Apache-2.0 OR MIT +polonius-the-crab Zlib OR MIT OR Apache-2.0 +polyglot-sql MIT +polyval Apache-2.0 OR MIT +portable-atomic Apache-2.0 OR MIT +portable-atomic-util Apache-2.0 OR MIT +postcard MIT OR Apache-2.0 +postgres PostgreSQL +potential_utf Unicode-3.0 +powerfmt MIT OR Apache-2.0 +ppv-lite86 MIT OR Apache-2.0 +ppv-lite86 MIT/Apache-2.0 +pretty_assertions MIT OR Apache-2.0 +prettyplease MIT OR Apache-2.0 +proc-macro-crate MIT OR Apache-2.0 +proc-macro2 MIT OR Apache-2.0 +prometheus-protobufs Apache +prometheus-protobufs-gogo BSD 3-clause +proptest MIT OR Apache-2.0 +prost Apache-2.0 +prost-derive Apache-2.0 +prost-types Apache-2.0 +protobuf MIT +protobuf-codegen MIT +protobuf-parse MIT +protobuf-support MIT +protoc-bin-vendored MIT +protoc-bin-vendored-linux-aarch_64 MIT +protoc-bin-vendored-linux-ppcle_64 MIT +protoc-bin-vendored-linux-s390_64 MIT +protoc-bin-vendored-linux-x86_32 MIT +protoc-bin-vendored-linux-x86_64 MIT +protoc-bin-vendored-macos-aarch_64 MIT +protoc-bin-vendored-macos-x86_64 MIT +protoc-bin-vendored-win32 MIT +prqlc Apache-2.0 +prqlc-parser Apache-2.0 +psm MIT OR Apache-2.0 +pulldown-cmark MIT +pybind11 BSD 3-clause +pybind11-upstream BSD 3-clause +quick-error MIT/Apache-2.0 +quick-xml MIT +quinn MIT OR Apache-2.0 +quinn-proto MIT OR Apache-2.0 +quinn-udp MIT OR Apache-2.0 +quote MIT OR Apache-2.0 +r-efi MIT OR Apache-2.0 OR LGPL-2.1-or-later +r-efi-alloc MIT OR Apache-2.0 OR LGPL-2.1-or-later +radium MIT +rand MIT OR Apache-2.0 +rand_chacha MIT OR Apache-2.0 +rand_core MIT OR Apache-2.0 +rand_xorshift MIT OR Apache-2.0 +rand_xoshiro MIT OR Apache-2.0 +rapidjson BSD +rapids-logger Apache +ratatui MIT +ratatui-core MIT +ratatui-crossterm MIT +ratatui-widgets MIT +raw-cpuid MIT +rawpointer MIT/Apache-2.0 +rayon MIT OR Apache-2.0 +rayon-core MIT OR Apache-2.0 +re2 BSD 3-clause +recursive MIT +recursive-proc-macro-impl MIT +redox_syscall MIT +redox_users MIT +ref-cast MIT OR Apache-2.0 +ref-cast-impl MIT OR Apache-2.0 +regalloc2 Apache-2.0 WITH LLVM-exception +regex MIT OR Apache-2.0 +regex-automata MIT OR Apache-2.0 +regex-syntax MIT OR Apache-2.0 +region MIT +relative-path MIT OR Apache-2.0 +replace_with MIT OR Apache-2.0 +replxx BSD 3-clause +reqwest MIT OR Apache-2.0 +ring Apache-2.0 AND ISC +rmm Apache +roaring MIT OR Apache-2.0 +rocksdb BSD 3-clause +roxmltree MIT OR Apache-2.0 +rstest MIT OR Apache-2.0 +rstest_macros MIT OR Apache-2.0 +rstest_reuse MIT OR Apache-2.0 +rustc-demangle MIT/Apache-2.0 +rustc-hash Apache-2.0 OR MIT +rustc-hash Apache-2.0/MIT +rustc-literal-escaper Apache-2.0 OR MIT +rustc_version MIT OR Apache-2.0 +rustix Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +rustix-linux-procfs Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +rustls Apache-2.0 OR ISC OR MIT +rustls-native-certs Apache-2.0 OR ISC OR MIT +rustls-pemfile Apache-2.0 OR ISC OR MIT +rustls-pki-types MIT OR Apache-2.0 +rustls-platform-verifier MIT OR Apache-2.0 +rustls-platform-verifier-android MIT OR Apache-2.0 +rustls-webpki ISC +rustversion MIT OR Apache-2.0 +rusty-fork MIT/Apache-2.0 +ryu Apache-2.0 OR BSL-1.0 +s2geometry Apache +safetensors Apache-2.0 +same-file Unlicense/MIT +schannel MIT +schemars MIT +schemars_derive MIT +scopeguard MIT OR Apache-2.0 +scratch MIT OR Apache-2.0 +sealed MIT OR Apache-2.0 +security-framework MIT OR Apache-2.0 +security-framework-sys MIT OR Apache-2.0 +semver MIT OR Apache-2.0 +seq-macro MIT OR Apache-2.0 +serde MIT OR Apache-2.0 +serde_bytes MIT OR Apache-2.0 +serde_core MIT OR Apache-2.0 +serde_derive MIT OR Apache-2.0 +serde_derive_internals MIT OR Apache-2.0 +serde_json MIT OR Apache-2.0 +serde_spanned MIT OR Apache-2.0 +serde_urlencoded MIT/Apache-2.0 +serde_yaml MIT OR Apache-2.0 +sha1 MIT OR Apache-2.0 +sha2 MIT OR Apache-2.0 +SHA3IUF MIT +sharded-slab MIT +shell-quote Apache-2.0 +shlex MIT OR Apache-2.0 +shuffling-allocator MPL-2.0 +signal-hook Apache-2.0/MIT +signal-hook-mio MIT OR Apache-2.0 +signal-hook-registry Apache-2.0/MIT +signal-hook-registry MIT OR Apache-2.0 +silk Apache +simd-adler32 MIT +simd_cesu8 Apache-2.0 OR MIT +simdcomp BSD 3-clause +simdjson MIT +simdutf MIT +simdutf8 MIT OR Apache-2.0 +similar Apache-2.0 +SimSIMD Apache +siphasher MIT OR Apache-2.0 +siphasher MIT/Apache-2.0 +size MIT +sketches-ddsketch Apache-2.0 +skim MIT +skim-common MIT +skim-tuikit MIT +slab MIT +smallvec MIT OR Apache-2.0 +smallvec-2.0.0 MIT OR Apache-2.0 +smol Apache-2.0 OR MIT +snap BSD-3-Clause +snappy BSD 3-clause +socket2 MIT OR Apache-2.0 +socks MIT/Apache-2.0 +souper-ir MIT OR Apache-2.0 +sparsehash-c11 BSD 3-clause +spdlog MIT +spin MIT +spmc MIT OR Apache-2.0 +sqids-cpp MIT +sql-console Apache +sqlformat MIT OR Apache-2.0 +sqlite-amalgamation BSD 3-clause +sqlparser Apache-2.0 +stable_deref_trait MIT OR Apache-2.0 +stable_deref_trait MIT/Apache-2.0 +stacker MIT OR Apache-2.0 +static_assertions MIT OR Apache-2.0 +strfmt MIT +string-interner MIT/Apache-2.0 +StringZilla Apache +strsim MIT +strum MIT +strum_macros MIT +substrait Apache +subtle BSD-3-Clause +symbolic_expressions MIT/Apache-2.0 +syn MIT OR Apache-2.0 +sync_wrapper Apache-2.0 +synstructure MIT +syntect MIT +system-configuration MIT OR Apache-2.0 +system-configuration-sys MIT OR Apache-2.0 +system-interface Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +sz3 BSD +tagptr MIT/Apache-2.0 +tap MIT +tar MIT OR Apache-2.0 +target-lexicon Apache-2.0 WITH LLVM-exception +target-triple MIT OR Apache-2.0 +tch MIT/Apache-2.0 +tempfile MIT OR Apache-2.0 +term MIT OR Apache-2.0 +term MIT/Apache-2.0 +termcolor Unlicense OR MIT +terminal_size MIT OR Apache-2.0 +termtree MIT +test-case MIT +test-case-core MIT +test-case-macros MIT +test-log Apache-2.0 OR MIT +test-log-core Apache-2.0 OR MIT +test-log-macros Apache-2.0 OR MIT +thiserror MIT OR Apache-2.0 +thiserror-impl MIT OR Apache-2.0 +thousands MIT/Apache-2.0 +thread_local Apache-2.0/MIT +thread_local MIT OR Apache-2.0 +thrift Apache +thrift Apache-2.0 +time MIT OR Apache-2.0 +time-core MIT OR Apache-2.0 +time-macros MIT OR Apache-2.0 +timer MPL-2.0 +tiny-keccak CC0-1.0 +tiny_http MIT OR Apache-2.0 +tinystr Unicode-3.0 +tinytemplate Apache-2.0 OR MIT +tinyvec Zlib OR Apache-2.0 OR MIT +tinyvec_macros MIT OR Apache-2.0 OR Zlib +tokio MIT +tokio-macros MIT +tokio-native-tls MIT +tokio-openssl MIT/Apache-2.0 +tokio-rustls MIT OR Apache-2.0 +tokio-stream MIT +tokio-util MIT +toml MIT OR Apache-2.0 +toml-0.9.12+spec MIT OR Apache-2.0 +toml-1.1.2+spec MIT OR Apache-2.0 +toml_datetime MIT OR Apache-2.0 +toml_datetime-0.7.5+spec MIT OR Apache-2.0 +toml_datetime-1.1.1+spec MIT OR Apache-2.0 +toml_edit-0.25.11+spec MIT OR Apache-2.0 +toml_parser MIT OR Apache-2.0 +toml_parser-1.1.2+spec MIT OR Apache-2.0 +toml_writer MIT OR Apache-2.0 +toml_writer-1.1.1+spec MIT OR Apache-2.0 +tonic MIT +tonic-prost MIT +torch-sys MIT/Apache-2.0 +tower MIT +tower-http MIT +tower-layer MIT +tower-service MIT +tracing MIT +tracing-attributes MIT +tracing-core MIT +tracing-log MIT +tracing-serde MIT +tracing-subscriber MIT +try-lock MIT +trybuild MIT OR Apache-2.0 +tui-input MIT +twox-hash MIT +typenum MIT OR Apache-2.0 +unarray MIT OR Apache-2.0 +unicase MIT OR Apache-2.0 +unicode-ident (MIT OR Apache-2.0) AND Unicode-3.0 +unicode-segmentation MIT OR Apache-2.0 +unicode-segmentation MIT/Apache-2.0 +unicode-truncate MIT OR Apache-2.0 +unicode-width MIT OR Apache-2.0 +unicode-width MIT/Apache-2.0 +unicode-xid MIT OR Apache-2.0 +unicode_categories MIT OR Apache-2.0 +universal-hash MIT OR Apache-2.0 +unsafe-libyaml MIT +untrusted ISC +unwinding MIT OR Apache-2.0 +ureq MIT OR Apache-2.0 +ureq-proto MIT OR Apache-2.0 +url MIT OR Apache-2.0 +usearch Apache +utf-8 MIT OR Apache-2.0 +utf16_iter Apache-2.0 OR MIT +utf8-zero MIT OR Apache-2.0 +utf8_iter Apache-2.0 OR MIT +utf8parse Apache-2.0 OR MIT +utf8proc MIT +uuid Apache-2.0 OR MIT +v8 MIT +valuable MIT +vcpkg MIT/Apache-2.0 +vectorscan Boost +vergen MIT OR Apache-2.0 +vergen-gitcl MIT OR Apache-2.0 +vergen-lib MIT OR Apache-2.0 +version_check MIT/Apache-2.0 +vex-sdk MIT +vortex Apache-2.0 +vortex-alp Apache-2.0 +vortex-array Apache-2.0 +vortex-array-macros Apache-2.0 +vortex-arrow Apache-2.0 +vortex-btrblocks Apache-2.0 +vortex-buffer Apache-2.0 +vortex-bytebool Apache-2.0 +vortex-compressor Apache-2.0 +vortex-compute Apache-2.0 +vortex-datetime-parts Apache-2.0 +vortex-decimal-byte-parts Apache-2.0 +vortex-edition Apache-2.0 +vortex-error Apache-2.0 +vortex-fastlanes Apache-2.0 +vortex-file Apache-2.0 +vortex-flatbuffers Apache-2.0 +vortex-fsst Apache-2.0 +vortex-io Apache-2.0 +vortex-ipc Apache-2.0 +vortex-layout Apache-2.0 +vortex-mask Apache-2.0 +vortex-metrics Apache-2.0 +vortex-onpair Apache-2.0 +vortex-pco Apache-2.0 +vortex-proto Apache-2.0 +vortex-runend Apache-2.0 +vortex-scan Apache-2.0 +vortex-sequence Apache-2.0 +vortex-session Apache-2.0 +vortex-sparse Apache-2.0 +vortex-utils Apache-2.0 +vortex-zigzag Apache-2.0 +vortex-zstd Apache-2.0 +vte Apache-2.0 OR MIT +wagyu Boost +wait-timeout MIT/Apache-2.0 +waker-fn Apache-2.0 OR MIT +walkdir Unlicense/MIT +want MIT +wasi-0.11.0+wasi-snapshot Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-0.11.1+wasi-snapshot Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-0.13.3+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-0.14.2+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-0.14.4+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-nn Apache-2.0 +wasip1 Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasip2-1.0.0+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasip2-1.0.3+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasip2-1.0.4+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasip3-0.4.0+wasi-0.3.0-rc-2026-01 Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasite Apache-2.0 OR BSL-1.0 OR MIT +wasm-bindgen MIT OR Apache-2.0 +wasm-bindgen-backend MIT OR Apache-2.0 +wasm-bindgen-futures MIT OR Apache-2.0 +wasm-bindgen-macro MIT OR Apache-2.0 +wasm-bindgen-macro-support MIT OR Apache-2.0 +wasm-bindgen-shared MIT OR Apache-2.0 +wasm-compose Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-encoder Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-metadata Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-mutate Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-smith Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-streams MIT OR Apache-2.0 +wasm-wave Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasmi MIT/Apache-2.0 +wasmi_collections MIT/Apache-2.0 +wasmi_core MIT/Apache-2.0 +wasmi_ir MIT/Apache-2.0 +wasmparser Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasmprinter Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasmtime Apache +wast Apache-2.0 WITH LLVM-exception +wast Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wat Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +web-sys MIT OR Apache-2.0 +web-time MIT OR Apache-2.0 +webpki-root-certs CDLA-Permissive-2.0 +webpki-roots CDLA-Permissive-2.0 +webpki-roots MPL-2.0 +which MIT +whoami Apache-2.0 OR BSL-1.0 OR MIT +winapi MIT/Apache-2.0 +winapi-i686-pc-windows-gnu MIT/Apache-2.0 +winapi-util Unlicense OR MIT +winapi-util Unlicense/MIT +winapi-x86_64-pc-windows-gnu MIT/Apache-2.0 +windows MIT OR Apache-2.0 +windows-core MIT OR Apache-2.0 +windows-implement MIT OR Apache-2.0 +windows-interface MIT OR Apache-2.0 +windows-link MIT OR Apache-2.0 +windows-registry MIT OR Apache-2.0 +windows-result MIT OR Apache-2.0 +windows-strings MIT OR Apache-2.0 +windows-sys MIT OR Apache-2.0 +windows-targets MIT OR Apache-2.0 +windows_aarch64_gnullvm MIT OR Apache-2.0 +windows_aarch64_msvc MIT OR Apache-2.0 +windows_i686_gnu MIT OR Apache-2.0 +windows_i686_gnullvm MIT OR Apache-2.0 +windows_i686_msvc MIT OR Apache-2.0 +windows_x86_64_gnu MIT OR Apache-2.0 +windows_x86_64_gnullvm MIT OR Apache-2.0 +windows_x86_64_msvc MIT OR Apache-2.0 +winnow MIT +winsafe MIT +winx Apache-2.0 WITH LLVM-exception +wit-bindgen Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-bindgen-core Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-bindgen-rt Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-bindgen-rust Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-bindgen-rust-macro Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-component Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-parser Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +witx Apache-2.0 +write16 Apache-2.0 OR MIT +writeable Unicode-3.0 +wstd Apache-2.0 WITH LLVM-exception +wstd-macro Apache-2.0 WITH LLVM-exception +wyhash Public Domain +wyz MIT +x11rb MIT OR Apache-2.0 +x11rb-protocol MIT OR Apache-2.0 +xattr MIT OR Apache-2.0 +xdg Apache-2.0 OR MIT +xgboost Apache +xsimd BSD 3-clause +xxHash BSD +xz LGPL +yaml-cpp MIT +yansi MIT OR Apache-2.0 +yoke Unicode-3.0 +yoke-derive Unicode-3.0 +z85 MIT/Apache-2.0 +zerocopy BSD-2-Clause OR Apache-2.0 OR MIT +zerocopy-derive BSD-2-Clause OR Apache-2.0 OR MIT +zerofrom Unicode-3.0 +zerofrom-derive Unicode-3.0 +zeroize Apache-2.0 OR MIT +zerotrie Unicode-3.0 +zerovec Unicode-3.0 +zerovec-derive Unicode-3.0 +zigzag MIT +zip MIT +zlib-ng zLib +zlib-rs Zlib +zmij MIT +zstd BSD +zstd MIT +zstd-safe MIT OR Apache-2.0 +zstd-safe MIT/Apache-2.0 +zstd-sys MIT/Apache-2.0 +zxc BSD diff --git a/licenses/engine-third-party-26.11.0-rc.2.tsv b/licenses/engine-third-party-26.11.0-rc.2.tsv new file mode 100644 index 0000000..c995060 --- /dev/null +++ b/licenses/engine-third-party-26.11.0-rc.2.tsv @@ -0,0 +1,1082 @@ +abseil-cpp Apache +addr2line Apache-2.0 OR MIT +adler2 0BSD OR MIT OR Apache-2.0 +aead MIT OR Apache-2.0 +aes MIT OR Apache-2.0 +aes-gcm Apache-2.0 OR MIT +ahash MIT OR Apache-2.0 +aho-corasick Unlicense OR MIT +ai-sdk-cpp Apache +alloc-no-stdlib BSD-3-Clause +alloc-stdlib BSD-3-Clause +alloca MIT +allocator-api2 MIT OR Apache-2.0 +alp Apache-2.0 +ambient-authority Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +AMQP-CPP Apache +android_system_properties MIT OR Apache-2.0 +android_system_properties MIT/Apache-2.0 +anes MIT OR Apache-2.0 +anstream MIT OR Apache-2.0 +anstyle MIT OR Apache-2.0 +anstyle-parse MIT OR Apache-2.0 +anstyle-query MIT OR Apache-2.0 +anstyle-wincon MIT OR Apache-2.0 +antlr4-cpp-runtime BSD 2-clause +anyhow MIT OR Apache-2.0 +approx Apache-2.0 +ar_archive_writer Apache-2.0 WITH LLVM-exception +arbitrary MIT OR Apache-2.0 +arboard MIT OR Apache-2.0 +arbtest MIT OR Apache-2.0 +arc-swap MIT OR Apache-2.0 +arcref MIT +ariadne MIT +arrayref BSD-2-Clause +arrayvec MIT OR Apache-2.0 +arrow Apache +arrow Apache-2.0 +arrow-arith Apache-2.0 +arrow-array Apache-2.0 +arrow-array Apache-2.0 AND MIT +arrow-buffer Apache-2.0 +arrow-cast Apache-2.0 +arrow-csv Apache-2.0 +arrow-data Apache-2.0 +arrow-ipc Apache-2.0 +arrow-json Apache-2.0 +arrow-ord Apache-2.0 +arrow-row Apache-2.0 +arrow-schema Apache-2.0 +arrow-select Apache-2.0 +arrow-string Apache-2.0 +ascii Apache-2.0 OR MIT +async-channel Apache-2.0 OR MIT +async-executor Apache-2.0 OR MIT +async-fs Apache-2.0 OR MIT +async-io Apache-2.0 OR MIT +async-lock Apache-2.0 OR MIT +async-net Apache-2.0 OR MIT +async-process Apache-2.0 OR MIT +async-signal Apache-2.0 OR MIT +async-stream MIT +async-stream-impl MIT +async-task Apache-2.0 OR MIT +async-trait MIT OR Apache-2.0 +atoi MIT +atomic-waker Apache-2.0 OR MIT +autocfg Apache-2.0 OR MIT +avro Apache +aws Apache +aws-c-auth Apache +aws-c-cal Apache +aws-c-common Apache +aws-c-compression Apache +aws-c-event-stream Apache +aws-c-http Apache +aws-c-io Apache +aws-c-mqtt Apache +aws-c-s3 Apache +aws-c-sdkutils Apache +aws-checksums Apache +aws-crt-cpp Apache +aws-lc-rs ISC AND (Apache-2.0 OR ISC) +aws-lc-sys ISC AND (Apache-2.0 OR ISC) AND Apache-2.0 AND MIT AND BSD-3-Clause AND (Apache-2.0 OR ISC OR MIT) AND (Apache-2.0 OR ISC OR MIT-0) +aws-lc-sys ISC AND (Apache-2.0 OR ISC) AND OpenSSL +axum MIT +axum-core MIT +azure MIT +backtrace MIT OR Apache-2.0 +base64 MIT OR Apache-2.0 +base64ct Apache-2.0 OR MIT +bech32 MIT +beef MIT OR Apache-2.0 +better_io Apache-2.0 +bincode MIT +bindgen BSD-3-Clause +bit-set Apache-2.0 OR MIT +bit-vec Apache-2.0 OR MIT +bitflags MIT OR Apache-2.0 +bitflags MIT/Apache-2.0 +bitvec MIT +blake3 CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception +block-buffer MIT OR Apache-2.0 +block-padding MIT OR Apache-2.0 +blocking Apache-2.0 OR MIT +boost Boost +brotli BSD-3-Clause AND MIT +brotli MIT +brotli-decompressor BSD-3-Clause/MIT +bs-thread-pool MIT +bstr MIT OR Apache-2.0 +bumpalo MIT OR Apache-2.0 +by_address MIT OR Apache-2.0 +bytemuck Zlib OR Apache-2.0 OR MIT +byteorder Unlicense OR MIT +bytes MIT +bytesize Apache-2.0 +bzip2 MIT/Apache-2.0 +bzip2 bzip2 +bzip2-sys MIT/Apache-2.0 +c-ares MIT +camino MIT OR Apache-2.0 +cap-fs-ext Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +cap-net-ext Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +cap-primitives Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +cap-std Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +cap-time-ext Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +capnproto MIT +capstone MIT +capstone-sys MIT +cargo-platform MIT OR Apache-2.0 +cargo_metadata MIT +cast MIT OR Apache-2.0 +castaway MIT +cbc MIT OR Apache-2.0 +cbindgen MPL-2.0 +cc MIT OR Apache-2.0 +cccl Apache +cctz Apache +cexpr Apache-2.0/MIT +cfg-if MIT OR Apache-2.0 +cfg-if MIT/Apache-2.0 +cfg_aliases MIT +chacha20 MIT OR Apache-2.0 +chdig MIT +chrono MIT OR Apache-2.0 +chrono-tz MIT OR Apache-2.0 +chrono-tz-build MIT OR Apache-2.0 +chumsky MIT +chunked_transfer MIT OR Apache-2.0 +ciborium Apache-2.0 +ciborium-io Apache-2.0 +ciborium-ll Apache-2.0 +cipher MIT OR Apache-2.0 +cityhash-rs MIT OR Apache-2.0 +cityhash102 MIT +clang-sys Apache-2.0 +clap MIT OR Apache-2.0 +clap_builder MIT OR Apache-2.0 +clap_complete MIT OR Apache-2.0 +clap_derive MIT OR Apache-2.0 +clap_lex MIT OR Apache-2.0 +cld2 Apache +clickhouse MIT OR Apache-2.0 +clickhouse-derive MIT OR Apache-2.0 +clickhouse-rs-1.1.0 MIT +clickhouse-rs-cityhash-sys MIT +clickstack MIT +clipboard-win BSL-1.0 +cmake MIT OR Apache-2.0 +cobs MIT OR Apache-2.0 +codespan-reporting Apache-2.0 +colorchoice MIT OR Apache-2.0 +combine MIT +comfy-table MIT +compact_str MIT +concurrent-queue Apache-2.0 OR MIT +console-api MIT +console-subscriber MIT +const-random MIT OR Apache-2.0 +const-random-macro MIT OR Apache-2.0 +const_for MIT +constant_time_eq CC0-1.0 +constant_time_eq CC0-1.0 OR MIT-0 OR Apache-2.0 +convert_case MIT +core-foundation MIT OR Apache-2.0 +core-foundation-sys MIT OR Apache-2.0 +corrosion MIT +cpp_demangle MIT OR Apache-2.0 +cppkafka BSD 2-clause +cpufeatures MIT OR Apache-2.0 +crc MIT OR Apache-2.0 +crc-catalog MIT OR Apache-2.0 +crc32-s390x Apache +crc32-vpmsum Apache +crc32c BSD 3-clause +crc32fast MIT OR Apache-2.0 +criterion Apache-2.0 OR MIT +criterion-plot Apache-2.0 OR MIT +criterion-plot MIT/Apache-2.0 +critical-section MIT OR Apache-2.0 +croaring Apache +crossbeam MIT OR Apache-2.0 +crossbeam-channel MIT OR Apache-2.0 +crossbeam-deque MIT OR Apache-2.0 +crossbeam-epoch MIT OR Apache-2.0 +crossbeam-queue MIT OR Apache-2.0 +crossbeam-utils MIT OR Apache-2.0 +crossterm MIT +crossterm_winapi MIT +crunchy MIT +crypto-common MIT OR Apache-2.0 +csv Unlicense/MIT +csv-core Unlicense/MIT +ctr MIT OR Apache-2.0 +cty MIT OR Apache-2.0 +cucascade Apache +cuCollections Apache +cudf Apache +custom-labels Apache-2.0 +cxx MIT OR Apache-2.0 +cxx-build MIT OR Apache-2.0 +cxxbridge-cmd MIT OR Apache-2.0 +cxxbridge-flags MIT OR Apache-2.0 +cxxbridge-macro MIT OR Apache-2.0 +cyrus-sasl BSD 2-clause +darling MIT +darling_core MIT +darling_macro MIT +darts-clone BSD +dashmap MIT +datasketches-cpp Apache +datatest-stable MIT OR Apache-2.0 +debugid Apache-2.0 +defer-drop MPL-2.0 +defmt MIT OR Apache-2.0 +defmt-macros MIT OR Apache-2.0 +defmt-parser MIT OR Apache-2.0 +delta-kernel-rs Apache +der Apache-2.0 OR MIT +deranged MIT OR Apache-2.0 +derive_arbitrary MIT/Apache-2.0 +derive_builder MIT OR Apache-2.0 +derive_builder_core MIT OR Apache-2.0 +derive_builder_macro MIT OR Apache-2.0 +derive_more MIT +derive_more-impl MIT +des MIT OR Apache-2.0 +dhat MIT OR Apache-2.0 +diff MIT OR Apache-2.0 +digest MIT OR Apache-2.0 +directories-next MIT OR Apache-2.0 +dirs-next MIT OR Apache-2.0 +dirs-sys-next MIT OR Apache-2.0 +dispatch2 Zlib OR Apache-2.0 OR MIT +displaydoc MIT OR Apache-2.0 +dlmalloc MIT/Apache-2.0 +dlpack Apache +dmlc-core Apache +dns-lookup MIT/Apache-2.0 +document-features MIT OR Apache-2.0 +double-conversion BSD 3-clause +driftsort Apache +dtype_dispatch Apache-2.0 +dunce CC0-1.0 OR MIT-0 OR Apache-2.0 +dyn-clone MIT OR Apache-2.0 +easy-smt MIT OR Apache-2.0 +egg MIT +either MIT OR Apache-2.0 +embedded-io MIT OR Apache-2.0 +encoding_rs (Apache-2.0 OR MIT) AND BSD-3-Clause +enum-as-inner MIT/Apache-2.0 +enum-iterator 0BSD +enum-iterator-derive 0BSD +env_filter MIT OR Apache-2.0 +env_home MIT OR Apache-2.0 +env_logger MIT OR Apache-2.0 +equivalent Apache-2.0 OR MIT +errno MIT OR Apache-2.0 +error-code BSL-1.0 +escape8259 MIT +event-listener Apache-2.0 OR MIT +event-listener-strategy Apache-2.0 OR MIT +ext-trait Zlib OR MIT OR Apache-2.0 +ext-trait-proc_macros Zlib OR MIT OR Apache-2.0 +extension-traits Zlib OR MIT OR Apache-2.0 +fallible-iterator MIT/Apache-2.0 +fancy-regex MIT +fast_float MIT +fastlanes Apache-2.0 +fastops MIT +fastrand Apache-2.0 OR MIT +fd-lock MIT OR Apache-2.0 +file-per-thread-logger Apache-2.0 WITH LLVM-exception +filecheck Apache-2.0 WITH LLVM-exception +filedescriptor MIT +filetime MIT/Apache-2.0 +find-msvc-tools MIT OR Apache-2.0 +fixedbitset MIT/Apache-2.0 +flagset Apache-2.0 +flamelens MIT +flatbuffers Apache +flatbuffers Apache-2.0 +flate2 MIT OR Apache-2.0 +flexi_logger MIT OR Apache-2.0 +fmtlib MIT +fnv Apache-2.0 / MIT +foldhash Zlib +foreign-types MIT/Apache-2.0 +foreign-types-shared MIT/Apache-2.0 +form_urlencoded MIT OR Apache-2.0 +fortanix-sgx-abi MPL-2.0 +FP16 MIT +fs-set-times Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +fs_extra MIT +fslock MIT +fsst-rs Apache-2.0 +funty MIT +futures MIT OR Apache-2.0 +futures-channel MIT OR Apache-2.0 +futures-core MIT OR Apache-2.0 +futures-executor MIT OR Apache-2.0 +futures-io MIT OR Apache-2.0 +futures-lite Apache-2.0 OR MIT +futures-macro MIT OR Apache-2.0 +futures-sink MIT OR Apache-2.0 +futures-task MIT OR Apache-2.0 +futures-timer MIT/Apache-2.0 +futures-util MIT OR Apache-2.0 +fuzzy-matcher MIT +fxprof-processed-profile MIT OR Apache-2.0 +g2gen MIT/Apache-2.0 +g2p MIT/Apache-2.0 +g2poly MIT/Apache-2.0 +gdbstub MIT OR Apache-2.0 +gdbstub_arch MIT OR Apache-2.0 +gdeflate Apache +generic-array MIT +gethostname Apache-2.0 +getopts MIT OR Apache-2.0 +getrandom MIT OR Apache-2.0 +ghash Apache-2.0 OR MIT +gimli MIT OR Apache-2.0 +glob MIT OR Apache-2.0 +google-benchmark Apache +google-cloud-cpp Apache +google-protobuf BSD 3-clause +googletest BSD 3-clause +grpc Apache +gzip-header MIT/Apache-2.0 +h2 MIT +h3 Apache +half MIT OR Apache-2.0 +hashbrown MIT OR Apache-2.0 +hdfs-native Apache-2.0 +hdfs-native-object-store Apache-2.0 +hdrhistogram MIT/Apache-2.0 +heck MIT OR Apache-2.0 +heks MIT +hermit-abi MIT OR Apache-2.0 +hex MIT OR Apache-2.0 +hive-metastore Apache +hmac MIT OR Apache-2.0 +home MIT OR Apache-2.0 +hostname MIT +http MIT OR Apache-2.0 +http-body MIT +http-body-util MIT +httparse MIT OR Apache-2.0 +httpdate MIT OR Apache-2.0 +httpdate MIT/Apache-2.0 +humansize MIT/Apache-2.0 +humantime MIT OR Apache-2.0 +humantime MIT/Apache-2.0 +hyper MIT +hyper-rustls Apache-2.0 OR ISC OR MIT +hyper-timeout MIT OR Apache-2.0 +hyper-tls MIT/Apache-2.0 +hyper-util MIT +iana-time-zone MIT OR Apache-2.0 +iana-time-zone-haiku MIT OR Apache-2.0 +icu Public Domain +icu_collections Unicode-3.0 +icu_locale_core Unicode-3.0 +icu_locid Unicode-3.0 +icu_locid_transform Unicode-3.0 +icu_locid_transform_data Unicode-3.0 +icu_normalizer Unicode-3.0 +icu_normalizer_data Unicode-3.0 +icu_properties Unicode-3.0 +icu_properties_data Unicode-3.0 +icu_provider Unicode-3.0 +icu_provider_macros Unicode-3.0 +icudata Public Domain +id-arena MIT/Apache-2.0 +ident_case MIT/Apache-2.0 +idna MIT +idna MIT OR Apache-2.0 +idna_adapter Apache-2.0 OR MIT +indexmap Apache-2.0 OR MIT +indoc MIT OR Apache-2.0 +inout MIT OR Apache-2.0 +instability MIT +instant BSD-3-Clause +integer-encoding MIT +inventory MIT OR Apache-2.0 +io-extras Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +io-lifetimes Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +io-uring MIT OR Apache-2.0 +ipcrypt2 ISC +ipnet MIT OR Apache-2.0 +ipnsort Apache +is-terminal MIT +is_terminal_polyfill MIT OR Apache-2.0 +isa-l BSD 3-clause +itertools MIT OR Apache-2.0 +itertools MIT/Apache-2.0 +itoa MIT OR Apache-2.0 +ittapi GPL-2.0-only OR BSD-3-Clause +ittapi-sys GPL-2.0-only OR BSD-3-Clause +jemalloc BSD 2-clause +Jieba-CPP MIT +jiff Unlicense OR MIT +jiff-core Unlicense OR MIT +jiff-static Unlicense OR MIT +jiff-tzdb Unlicense OR MIT +jiff-tzdb-platform Unlicense OR MIT +jni MIT OR Apache-2.0 +jni-macros MIT OR Apache-2.0 +jni-sys MIT OR Apache-2.0 +jni-sys-macros MIT OR Apache-2.0 +jobserver MIT OR Apache-2.0 +js-sys MIT OR Apache-2.0 +json-from-wast Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +jwt-cpp MIT +kanal MIT +kasuari MIT OR Apache-2.0 +krb5 BSD +kvikio Apache +lasso MIT OR Apache-2.0 +lazy_static MIT OR Apache-2.0 +lazy_static MIT/Apache-2.0 +lazycell MIT/Apache-2.0 +leb128 Apache-2.0/MIT +leb128fmt MIT OR Apache-2.0 +lemmagen-c LGPL +lending-iterator Zlib OR MIT OR Apache-2.0 +lending-iterator-proc_macros Zlib OR MIT OR Apache-2.0 +lexical-core MIT/Apache-2.0 +lexical-parse-float MIT/Apache-2.0 +lexical-parse-integer MIT/Apache-2.0 +lexical-util MIT/Apache-2.0 +lexical-write-float MIT/Apache-2.0 +lexical-write-integer MIT/Apache-2.0 +libarchive Apache +libbcrypt Public Domain +libc MIT OR Apache-2.0 +libcotp Apache +libcpuid BSD 2-clause +libdeflate MIT +libdivide Boost +libfarmhash MIT +libfiu Public Domain +libfuzzer-sys (MIT OR Apache-2.0) AND NCSA +libgsasl LGPL +libhdfs3 Apache +libloading ISC +libm MIT +libmetrohash Apache +libpqxx BSD 3-clause +libprotobuf-mutator Apache +librdkafka Apache +libredox MIT +librseq BSD +librtcx Apache +libssh LGPL +libstemmer_c BSD 3-clause +libtest-mimic MIT/Apache-2.0 +libucontext ISC +liburing MIT +libuv BSD +libxml2 MIT +line-clipping MIT OR Apache-2.0 +link-cplusplus MIT OR Apache-2.0 +linux-raw-sys Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +listenfd Apache-2.0 +litemap Unicode-3.0 +litrs MIT OR Apache-2.0 +llvm-project Apache +lock_api MIT OR Apache-2.0 +log MIT OR Apache-2.0 +logos MIT OR Apache-2.0 +logos-codegen MIT OR Apache-2.0 +logos-derive MIT OR Apache-2.0 +lru MIT +lru-slab MIT OR Apache-2.0 OR Zlib +lz4 BSD +lz4 MIT +lz4-sys-1.11.1+lz4 MIT +lz4_flex MIT +mach2 BSD-2-Clause OR MIT OR Apache-2.0 +macro-string MIT OR Apache-2.0 +macro_rules_attribute MIT +macro_rules_attribute-proc_macro MIT +magic_enum MIT +managed 0BSD +mapbox-geometry ISC +mariadb-connector-c LGPL +match_cfg MIT/Apache-2.0 +matchers MIT +matchit MIT AND BSD-3-Clause +matrixmultiply MIT/Apache-2.0 +maybe-owned MIT OR Apache-2.0 +md-5 MIT OR Apache-2.0 +MeCab BSD +memchr Unlicense OR MIT +memfd MIT OR Apache-2.0 +memmap2 MIT OR Apache-2.0 +memmap2 MIT/Apache-2.0 +mime MIT OR Apache-2.0 +minimal-lexical MIT/Apache-2.0 +miniselect Boost +miniz_oxide MIT OR Zlib OR Apache-2.0 +minizip-ng zLib +mintex Apache-2.0 +mio MIT +moka (MIT OR Apache-2.0) AND Apache-2.0 +mongo-c-driver Apache +mongo-cxx-driver Apache +morton-nd MIT +moto-rt MIT OR Apache-2.0 +msgpack-c Boost +murmurhash Public Domain +musl Public Domain +mutatis MIT OR Apache-2.0 +mutatis-derive MIT OR Apache-2.0 +nanoarrow Apache +native-tls MIT OR Apache-2.0 +nats-io Apache +ndarray MIT OR Apache-2.0 +never-say-never Zlib OR MIT OR Apache-2.0 +nix MIT +nlohmann-json MIT +nom MIT +nougat Zlib OR MIT OR Apache-2.0 +nougat-proc_macros Zlib OR MIT OR Apache-2.0 +nu-ansi-term MIT +num-bigint MIT OR Apache-2.0 +num-complex MIT OR Apache-2.0 +num-conv MIT OR Apache-2.0 +num-integer MIT OR Apache-2.0 +num-traits MIT OR Apache-2.0 +num_cpus MIT OR Apache-2.0 +num_enum BSD-3-Clause OR MIT OR Apache-2.0 +num_enum_derive BSD-3-Clause OR MIT OR Apache-2.0 +num_threads MIT OR Apache-2.0 +NuRaft Apache +nvtx Apache +objc2 MIT +objc2-app-kit Zlib OR Apache-2.0 OR MIT +objc2-core-foundation Zlib OR Apache-2.0 OR MIT +objc2-core-graphics Zlib OR Apache-2.0 OR MIT +objc2-encode MIT +objc2-foundation MIT +objc2-io-surface Zlib OR Apache-2.0 OR MIT +object Apache-2.0 OR MIT +object_store MIT/Apache-2.0 +ocaml-boxroot-sys MIT +ocaml-interop MIT +ocaml-sys ISC +once_cell MIT OR Apache-2.0 +once_cell_polyfill MIT OR Apache-2.0 +oneshot MIT OR Apache-2.0 +onig MIT +onig_sys MIT +onpair Apache-2.0 +oorandom MIT +opaque-debug MIT OR Apache-2.0 +openldap OpenLDAP Version 2.8 +openssl Apache +openssl Apache-2.0 +openssl-macros MIT/Apache-2.0 +openssl-probe MIT OR Apache-2.0 +openssl-probe MIT/Apache-2.0 +openssl-sys MIT +openvino Apache-2.0 +openvino-finder Apache-2.0 +openvino-sys Apache-2.0 +optimized-routines Apache +ordered-float MIT +ort-2.0.0 MIT OR Apache-2.0 +ort-sys-2.0.0 MIT OR Apache-2.0 +page_size MIT/Apache-2.0 +palette MIT OR Apache-2.0 +palette_derive MIT OR Apache-2.0 +palette_math MIT OR Apache-2.0 +parking Apache-2.0 OR MIT +parking_lot MIT OR Apache-2.0 +parking_lot_core MIT OR Apache-2.0 +parquet Apache-2.0 +parquet-testing Apache +parse-zoneinfo MIT +password-hash MIT OR Apache-2.0 +paste MIT OR Apache-2.0 +pastey MIT OR Apache-2.0 +pbkdf2 MIT OR Apache-2.0 +pco Apache-2.0 +pcodec Apache +pdqsort zLib +pem-rfc7468 Apache-2.0 OR MIT +percent-encoding MIT OR Apache-2.0 +perfetto_protos Apache-2.0 +petgraph MIT OR Apache-2.0 +phf MIT +phf_codegen MIT +phf_generator MIT +phf_shared MIT +pin-project Apache-2.0 OR MIT +pin-project-internal Apache-2.0 OR MIT +pin-project-lite Apache-2.0 OR MIT +pin-utils MIT OR Apache-2.0 +piper MIT OR Apache-2.0 +pkg-config MIT OR Apache-2.0 +plain MIT/Apache-2.0 +plotters MIT +plotters-backend MIT +plotters-svg MIT +pocketfft BSD 3-clause +poco Boost +polling Apache-2.0 OR MIT +polonius-the-crab Zlib OR MIT OR Apache-2.0 +polyglot-sql MIT +polyval Apache-2.0 OR MIT +portable-atomic Apache-2.0 OR MIT +portable-atomic-util Apache-2.0 OR MIT +postcard MIT OR Apache-2.0 +postgres PostgreSQL +potential_utf Unicode-3.0 +powerfmt MIT OR Apache-2.0 +ppv-lite86 MIT OR Apache-2.0 +ppv-lite86 MIT/Apache-2.0 +pretty_assertions MIT OR Apache-2.0 +prettyplease MIT OR Apache-2.0 +proc-macro-crate MIT OR Apache-2.0 +proc-macro2 MIT OR Apache-2.0 +prometheus-protobufs Apache +prometheus-protobufs-gogo BSD 3-clause +proptest MIT OR Apache-2.0 +prost Apache-2.0 +prost-derive Apache-2.0 +prost-types Apache-2.0 +protobuf MIT +protobuf-codegen MIT +protobuf-parse MIT +protobuf-support MIT +protoc-bin-vendored MIT +protoc-bin-vendored-linux-aarch_64 MIT +protoc-bin-vendored-linux-ppcle_64 MIT +protoc-bin-vendored-linux-s390_64 MIT +protoc-bin-vendored-linux-x86_32 MIT +protoc-bin-vendored-linux-x86_64 MIT +protoc-bin-vendored-macos-aarch_64 MIT +protoc-bin-vendored-macos-x86_64 MIT +protoc-bin-vendored-win32 MIT +prqlc Apache-2.0 +prqlc-parser Apache-2.0 +psm MIT OR Apache-2.0 +pulldown-cmark MIT +pybind11 BSD 3-clause +pybind11-upstream BSD 3-clause +quick-error MIT/Apache-2.0 +quick-xml MIT +quinn MIT OR Apache-2.0 +quinn-proto MIT OR Apache-2.0 +quinn-udp MIT OR Apache-2.0 +quote MIT OR Apache-2.0 +r-efi MIT OR Apache-2.0 OR LGPL-2.1-or-later +r-efi-alloc MIT OR Apache-2.0 OR LGPL-2.1-or-later +radium MIT +rand MIT OR Apache-2.0 +rand_chacha MIT OR Apache-2.0 +rand_core MIT OR Apache-2.0 +rand_xorshift MIT OR Apache-2.0 +rand_xoshiro MIT OR Apache-2.0 +rapidjson BSD +rapids-logger Apache +ratatui MIT +ratatui-core MIT +ratatui-crossterm MIT +ratatui-widgets MIT +raw-cpuid MIT +rawpointer MIT/Apache-2.0 +rayon MIT OR Apache-2.0 +rayon-core MIT OR Apache-2.0 +re2 BSD 3-clause +recursive MIT +recursive-proc-macro-impl MIT +redox_syscall MIT +redox_users MIT +ref-cast MIT OR Apache-2.0 +ref-cast-impl MIT OR Apache-2.0 +regalloc2 Apache-2.0 WITH LLVM-exception +regex MIT OR Apache-2.0 +regex-automata MIT OR Apache-2.0 +regex-syntax MIT OR Apache-2.0 +region MIT +relative-path MIT OR Apache-2.0 +replace_with MIT OR Apache-2.0 +replxx BSD 3-clause +reqwest MIT OR Apache-2.0 +ring Apache-2.0 AND ISC +rmm Apache +roaring MIT OR Apache-2.0 +rocksdb BSD 3-clause +roxmltree MIT OR Apache-2.0 +rstest MIT OR Apache-2.0 +rstest_macros MIT OR Apache-2.0 +rstest_reuse MIT OR Apache-2.0 +rustc-demangle MIT/Apache-2.0 +rustc-hash Apache-2.0 OR MIT +rustc-hash Apache-2.0/MIT +rustc-literal-escaper Apache-2.0 OR MIT +rustc_version MIT OR Apache-2.0 +rustix Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +rustix-linux-procfs Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +rustls Apache-2.0 OR ISC OR MIT +rustls-native-certs Apache-2.0 OR ISC OR MIT +rustls-pemfile Apache-2.0 OR ISC OR MIT +rustls-pki-types MIT OR Apache-2.0 +rustls-platform-verifier MIT OR Apache-2.0 +rustls-platform-verifier-android MIT OR Apache-2.0 +rustls-webpki ISC +rustversion MIT OR Apache-2.0 +rusty-fork MIT/Apache-2.0 +ryu Apache-2.0 OR BSL-1.0 +s2geometry Apache +safetensors Apache-2.0 +same-file Unlicense/MIT +schannel MIT +schemars MIT +schemars_derive MIT +scopeguard MIT OR Apache-2.0 +scratch MIT OR Apache-2.0 +sealed MIT OR Apache-2.0 +security-framework MIT OR Apache-2.0 +security-framework-sys MIT OR Apache-2.0 +semver MIT OR Apache-2.0 +seq-macro MIT OR Apache-2.0 +serde MIT OR Apache-2.0 +serde_bytes MIT OR Apache-2.0 +serde_core MIT OR Apache-2.0 +serde_derive MIT OR Apache-2.0 +serde_derive_internals MIT OR Apache-2.0 +serde_json MIT OR Apache-2.0 +serde_spanned MIT OR Apache-2.0 +serde_urlencoded MIT/Apache-2.0 +serde_yaml MIT OR Apache-2.0 +sha1 MIT OR Apache-2.0 +sha2 MIT OR Apache-2.0 +SHA3IUF MIT +sharded-slab MIT +shell-quote Apache-2.0 +shlex MIT OR Apache-2.0 +shuffling-allocator MPL-2.0 +signal-hook Apache-2.0/MIT +signal-hook-mio MIT OR Apache-2.0 +signal-hook-registry Apache-2.0/MIT +signal-hook-registry MIT OR Apache-2.0 +silk Apache +simd-adler32 MIT +simd_cesu8 Apache-2.0 OR MIT +simdcomp BSD 3-clause +simdjson MIT +simdutf MIT +simdutf8 MIT OR Apache-2.0 +similar Apache-2.0 +SimSIMD Apache +siphasher MIT OR Apache-2.0 +siphasher MIT/Apache-2.0 +size MIT +sketches-ddsketch Apache-2.0 +skim MIT +skim-common MIT +skim-tuikit MIT +slab MIT +smallvec MIT OR Apache-2.0 +smallvec-2.0.0 MIT OR Apache-2.0 +smol Apache-2.0 OR MIT +snap BSD-3-Clause +snappy BSD 3-clause +socket2 MIT OR Apache-2.0 +socks MIT/Apache-2.0 +souper-ir MIT OR Apache-2.0 +sparsehash-c11 BSD 3-clause +spdlog MIT +spin MIT +spmc MIT OR Apache-2.0 +sqids-cpp MIT +sql-console Apache +sqlformat MIT OR Apache-2.0 +sqlite-amalgamation BSD 3-clause +sqlparser Apache-2.0 +stable_deref_trait MIT OR Apache-2.0 +stable_deref_trait MIT/Apache-2.0 +stacker MIT OR Apache-2.0 +static_assertions MIT OR Apache-2.0 +strfmt MIT +string-interner MIT/Apache-2.0 +StringZilla Apache +strsim MIT +strum MIT +strum_macros MIT +substrait Apache +subtle BSD-3-Clause +symbolic_expressions MIT/Apache-2.0 +syn MIT OR Apache-2.0 +sync_wrapper Apache-2.0 +synstructure MIT +syntect MIT +system-configuration MIT OR Apache-2.0 +system-configuration-sys MIT OR Apache-2.0 +system-interface Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +sz3 BSD +tagptr MIT/Apache-2.0 +tap MIT +tar MIT OR Apache-2.0 +target-lexicon Apache-2.0 WITH LLVM-exception +target-triple MIT OR Apache-2.0 +tch MIT/Apache-2.0 +tempfile MIT OR Apache-2.0 +term MIT OR Apache-2.0 +term MIT/Apache-2.0 +termcolor Unlicense OR MIT +terminal_size MIT OR Apache-2.0 +termtree MIT +test-case MIT +test-case-core MIT +test-case-macros MIT +test-log Apache-2.0 OR MIT +test-log-core Apache-2.0 OR MIT +test-log-macros Apache-2.0 OR MIT +thiserror MIT OR Apache-2.0 +thiserror-impl MIT OR Apache-2.0 +thousands MIT/Apache-2.0 +thread_local Apache-2.0/MIT +thread_local MIT OR Apache-2.0 +thrift Apache +thrift Apache-2.0 +time MIT OR Apache-2.0 +time-core MIT OR Apache-2.0 +time-macros MIT OR Apache-2.0 +timer MPL-2.0 +tiny-keccak CC0-1.0 +tiny_http MIT OR Apache-2.0 +tinystr Unicode-3.0 +tinytemplate Apache-2.0 OR MIT +tinyvec Zlib OR Apache-2.0 OR MIT +tinyvec_macros MIT OR Apache-2.0 OR Zlib +tokio MIT +tokio-macros MIT +tokio-native-tls MIT +tokio-openssl MIT/Apache-2.0 +tokio-rustls MIT OR Apache-2.0 +tokio-stream MIT +tokio-util MIT +toml MIT OR Apache-2.0 +toml-0.9.12+spec MIT OR Apache-2.0 +toml-1.1.2+spec MIT OR Apache-2.0 +toml_datetime MIT OR Apache-2.0 +toml_datetime-0.7.5+spec MIT OR Apache-2.0 +toml_datetime-1.1.1+spec MIT OR Apache-2.0 +toml_edit-0.25.11+spec MIT OR Apache-2.0 +toml_parser MIT OR Apache-2.0 +toml_parser-1.1.2+spec MIT OR Apache-2.0 +toml_writer MIT OR Apache-2.0 +toml_writer-1.1.1+spec MIT OR Apache-2.0 +tonic MIT +tonic-prost MIT +torch-sys MIT/Apache-2.0 +tower MIT +tower-http MIT +tower-layer MIT +tower-service MIT +tracing MIT +tracing-attributes MIT +tracing-core MIT +tracing-log MIT +tracing-serde MIT +tracing-subscriber MIT +try-lock MIT +trybuild MIT OR Apache-2.0 +tui-input MIT +twox-hash MIT +typenum MIT OR Apache-2.0 +unarray MIT OR Apache-2.0 +unicase MIT OR Apache-2.0 +unicode-ident (MIT OR Apache-2.0) AND Unicode-3.0 +unicode-segmentation MIT OR Apache-2.0 +unicode-segmentation MIT/Apache-2.0 +unicode-truncate MIT OR Apache-2.0 +unicode-width MIT OR Apache-2.0 +unicode-width MIT/Apache-2.0 +unicode-xid MIT OR Apache-2.0 +unicode_categories MIT OR Apache-2.0 +universal-hash MIT OR Apache-2.0 +unsafe-libyaml MIT +untrusted ISC +unwinding MIT OR Apache-2.0 +ureq MIT OR Apache-2.0 +ureq-proto MIT OR Apache-2.0 +url MIT OR Apache-2.0 +usearch Apache +utf-8 MIT OR Apache-2.0 +utf16_iter Apache-2.0 OR MIT +utf8-zero MIT OR Apache-2.0 +utf8_iter Apache-2.0 OR MIT +utf8parse Apache-2.0 OR MIT +utf8proc MIT +uuid Apache-2.0 OR MIT +v8 MIT +valuable MIT +vcpkg MIT/Apache-2.0 +vectorscan Boost +vergen MIT OR Apache-2.0 +vergen-gitcl MIT OR Apache-2.0 +vergen-lib MIT OR Apache-2.0 +version_check MIT/Apache-2.0 +vex-sdk MIT +vortex Apache-2.0 +vortex-alp Apache-2.0 +vortex-array Apache-2.0 +vortex-array-macros Apache-2.0 +vortex-arrow Apache-2.0 +vortex-btrblocks Apache-2.0 +vortex-buffer Apache-2.0 +vortex-bytebool Apache-2.0 +vortex-compressor Apache-2.0 +vortex-compute Apache-2.0 +vortex-datetime-parts Apache-2.0 +vortex-decimal-byte-parts Apache-2.0 +vortex-edition Apache-2.0 +vortex-error Apache-2.0 +vortex-fastlanes Apache-2.0 +vortex-file Apache-2.0 +vortex-flatbuffers Apache-2.0 +vortex-fsst Apache-2.0 +vortex-io Apache-2.0 +vortex-ipc Apache-2.0 +vortex-layout Apache-2.0 +vortex-mask Apache-2.0 +vortex-metrics Apache-2.0 +vortex-onpair Apache-2.0 +vortex-pco Apache-2.0 +vortex-proto Apache-2.0 +vortex-runend Apache-2.0 +vortex-scan Apache-2.0 +vortex-sequence Apache-2.0 +vortex-session Apache-2.0 +vortex-sparse Apache-2.0 +vortex-utils Apache-2.0 +vortex-zigzag Apache-2.0 +vortex-zstd Apache-2.0 +vte Apache-2.0 OR MIT +wagyu Boost +wait-timeout MIT/Apache-2.0 +waker-fn Apache-2.0 OR MIT +walkdir Unlicense/MIT +want MIT +wasi-0.11.0+wasi-snapshot Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-0.11.1+wasi-snapshot Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-0.13.3+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-0.14.2+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-0.14.4+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasi-nn Apache-2.0 +wasip1 Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasip2-1.0.0+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasip2-1.0.3+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasip2-1.0.4+wasi Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasip3-0.4.0+wasi-0.3.0-rc-2026-01 Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasite Apache-2.0 OR BSL-1.0 OR MIT +wasm-bindgen MIT OR Apache-2.0 +wasm-bindgen-backend MIT OR Apache-2.0 +wasm-bindgen-futures MIT OR Apache-2.0 +wasm-bindgen-macro MIT OR Apache-2.0 +wasm-bindgen-macro-support MIT OR Apache-2.0 +wasm-bindgen-shared MIT OR Apache-2.0 +wasm-compose Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-encoder Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-metadata Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-mutate Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-smith Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasm-streams MIT OR Apache-2.0 +wasm-wave Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasmi MIT/Apache-2.0 +wasmi_collections MIT/Apache-2.0 +wasmi_core MIT/Apache-2.0 +wasmi_ir MIT/Apache-2.0 +wasmparser Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasmprinter Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wasmtime Apache +wast Apache-2.0 WITH LLVM-exception +wast Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wat Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +web-sys MIT OR Apache-2.0 +web-time MIT OR Apache-2.0 +webpki-root-certs CDLA-Permissive-2.0 +webpki-roots CDLA-Permissive-2.0 +webpki-roots MPL-2.0 +which MIT +whoami Apache-2.0 OR BSL-1.0 OR MIT +winapi MIT/Apache-2.0 +winapi-i686-pc-windows-gnu MIT/Apache-2.0 +winapi-util Unlicense OR MIT +winapi-util Unlicense/MIT +winapi-x86_64-pc-windows-gnu MIT/Apache-2.0 +windows MIT OR Apache-2.0 +windows-core MIT OR Apache-2.0 +windows-implement MIT OR Apache-2.0 +windows-interface MIT OR Apache-2.0 +windows-link MIT OR Apache-2.0 +windows-registry MIT OR Apache-2.0 +windows-result MIT OR Apache-2.0 +windows-strings MIT OR Apache-2.0 +windows-sys MIT OR Apache-2.0 +windows-targets MIT OR Apache-2.0 +windows_aarch64_gnullvm MIT OR Apache-2.0 +windows_aarch64_msvc MIT OR Apache-2.0 +windows_i686_gnu MIT OR Apache-2.0 +windows_i686_gnullvm MIT OR Apache-2.0 +windows_i686_msvc MIT OR Apache-2.0 +windows_x86_64_gnu MIT OR Apache-2.0 +windows_x86_64_gnullvm MIT OR Apache-2.0 +windows_x86_64_msvc MIT OR Apache-2.0 +winnow MIT +winsafe MIT +winx Apache-2.0 WITH LLVM-exception +wit-bindgen Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-bindgen-core Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-bindgen-rt Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-bindgen-rust Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-bindgen-rust-macro Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-component Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +wit-parser Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +witx Apache-2.0 +write16 Apache-2.0 OR MIT +writeable Unicode-3.0 +wstd Apache-2.0 WITH LLVM-exception +wstd-macro Apache-2.0 WITH LLVM-exception +wyhash Public Domain +wyz MIT +x11rb MIT OR Apache-2.0 +x11rb-protocol MIT OR Apache-2.0 +xattr MIT OR Apache-2.0 +xdg Apache-2.0 OR MIT +xgboost Apache +xsimd BSD 3-clause +xxHash BSD +xz LGPL +yaml-cpp MIT +yansi MIT OR Apache-2.0 +yoke Unicode-3.0 +yoke-derive Unicode-3.0 +z85 MIT/Apache-2.0 +zerocopy BSD-2-Clause OR Apache-2.0 OR MIT +zerocopy-derive BSD-2-Clause OR Apache-2.0 OR MIT +zerofrom Unicode-3.0 +zerofrom-derive Unicode-3.0 +zeroize Apache-2.0 OR MIT +zerotrie Unicode-3.0 +zerovec Unicode-3.0 +zerovec-derive Unicode-3.0 +zigzag MIT +zip MIT +zlib-ng zLib +zlib-rs Zlib +zmij MIT +zstd BSD +zstd MIT +zstd-safe MIT OR Apache-2.0 +zstd-safe MIT/Apache-2.0 +zstd-sys MIT/Apache-2.0 +zxc BSD diff --git a/pom.xml b/pom.xml index 71bf275..e078e7d 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ mirrors them for the shell/CMake side. Changing engine.version requires a new Maven version (work plan section 4.3) and a full platform re-test. --> - 26.7.3 + 26.11.0-rc.2 1 2 diff --git a/scripts/build-native.sh b/scripts/build-native.sh index fe386e5..d6c5107 100755 --- a/scripts/build-native.sh +++ b/scripts/build-native.sh @@ -369,11 +369,10 @@ else Most entries are permissively licensed, and several that a filename scan would call GPL are dual licensed with the permissive half in force: zstd is BSD-3, rocksdb is - Apache-2.0, liburing is MIT, ittapi is BSD-3-Clause. Twelve carry a copyleft licence + Apache-2.0, liburing is MIT, ittapi is BSD-3-Clause. Eleven carry a copyleft licence with no permissive alternative: - lemmagen-c, libgsasl, libssh, mariadb-connector-c, - numactl, xz (LGPL) + lemmagen-c, libgsasl, libssh, mariadb-connector-c, xz (LGPL) cbindgen, defer-drop, fortanix-sgx-abi, shuffling-allocator, timer, webpki-roots (MPL-2.0) @@ -381,7 +380,7 @@ else MPL-2.0 is file-level copyleft and its obligations are lighter than LGPL's, which attach differently under static linking than under dynamic. - Whether any of the twelve is actually linked into this binary cannot be determined + Whether any of the eleven is actually linked into this binary cannot be determined from the binary: it is stripped, and static linking leaves no dynamic symbols to inspect. That question belongs to the engine build. diff --git a/scripts/engine.properties b/scripts/engine.properties index 73d2e31..b588792 100644 --- a/scripts/engine.properties +++ b/scripts/engine.properties @@ -6,30 +6,39 @@ # keep this file in sync with in the root pom.xml. # # Checksums are the release asset digests published by GitHub for the tag below -# (gh api repos/chdb-io/chdb-core/releases/tags/v26.7.3 --jq '.assets[].digest'). +# (gh api repos/chdb-io/chdb-core/releases/tags/v26.11.0-rc.2 --jq '.assets[].digest'), and +# the release's SHA256SUMS asset agrees with them. # # engine.version is what chdb_version() returns from the shared library, not the tag with # its 'v' stripped and not the version in the wheel file names. The loader compares the two -# and refuses a mismatch, so this is measured rather than derived: dlopen the macos-arm64 -# asset, call chdb_version(), and it returns "26.7.3". All four sources agree on this release -# -- tag, wheel names, tarball header and chdb_version() -- which they did not on the -# previous baseline, where the asset reported "26.7.2-rc.2" while its wheels were named -# 26.7.2. Agreement is the happy case, not the rule; keep measuring it. +# and refuses a mismatch, so this is measured rather than derived: dlopen the linux-x86_64 +# asset, call chdb_version(), and it returns "26.11.0-rc.2", which is also the CHDB_VERSION +# in the chdb.h every one of the four tarballs ships. The wheels disagree, as they did on +# v26.7.2-rc.2: they are named 26.11.0, without the qualifier. Agreement is the happy case, +# not the rule; keep measuring it. # -# v26.7.3 is a STABLE chdb-core release (published 2026-09-10, prerelease=false). That is what -# work plan section 4.3 requires of a V1 GA engine: a binding built on an engine RC is itself -# a preview, so the previous v26.7.2-rc.2 baseline was a release blocker in its own right. +# v26.11.0-rc.2 is a chdb-core PRE-RELEASE (published 2026-11-05, prerelease=true; not on +# PyPI), pinned to validate the ClickHouse 26.11 baseline ahead of the stable v26.11.1. It is +# v26.11.0-rc.1 plus chdb-core #312, on the same ClickHouse baseline (26.11.1.1). Work plan +# section 4.3: a binding built on an engine RC is itself an RC and cannot be V1 GA, so while +# this is the baseline only -rc. versions may be cut (the next is 1.0.0-rc.2; 1.0.0-rc.1 +# stays on v26.7.3), and the stable engine has to be re-pinned before 1.0.0. The last stable +# baseline was v26.7.3. # -# It also carries chdb-core #224, which fixes the signal-handler window reported as chdb-core -# #221 and tracked here as issue #14: scripts/run-signal-window-test.sh measure reports -# hostHandlersAtSigDfl=0 on this engine, against 688/613/724 on v26.7.2-rc.2, and its stress -# mode survives 6 of 6 runs where v26.7.2-rc.2 killed the JVM 8 times out of 8. Re-run both -# on the next baseline: a regression there is invisible to every other test. +# chdb-core #224, the fix for the signal-handler window reported as chdb-core #221 and +# tracked here as issue #14, arrived in v26.7.3: scripts/run-signal-window-test.sh measure +# reported hostHandlersAtSigDfl=0 there, against 688/613/724 on v26.7.2-rc.2, and its stress +# mode survived 6 of 6 runs where v26.7.2-rc.2 killed the JVM 8 times out of 8. Re-run both +# on every new baseline: a regression there is invisible to every other test. +# Re-run on v26.11.0-rc.1, on linux-x86_64: measure 3 reported hostHandlersAtSigDfl=0/0/0 +# over ~1.08M samples a run, and stress 6 survived 6 of 6 with 0 killed. +# Re-run on v26.11.0-rc.2, on linux-x86_64: measure 3 reported hostHandlersAtSigDfl=0/0/0 +# over ~1.11-1.25M samples a run, and stress 6 survived 6 of 6 with 0 killed. -engine.version=26.7.3 -engine.tag=v26.7.3 +engine.version=26.11.0-rc.2 +engine.tag=v26.11.0-rc.2 engine.repo=chdb-io/chdb-core -engine.asset.base=https://github.com/chdb-io/chdb-core/releases/download/v26.7.3 +engine.asset.base=https://github.com/chdb-io/chdb-core/releases/download/v26.11.0-rc.2 # platform id -> release asset name asset.macos-aarch64=macos-arm64-libchdb.tar.gz @@ -38,10 +47,10 @@ asset.linux-x86_64-gnu=linux-x86_64-libchdb.tar.gz asset.linux-aarch64-gnu=linux-aarch64-libchdb.tar.gz # platform id -> SHA-256 of the release asset -sha256.macos-aarch64=5640e50dccf711bf3dd5551333d08e43f433edf7bd94b2289f36c2539e627762 -sha256.macos-x86_64=af5ded3ed3e84c31af1cd198dcf459f11d2b6aad4f6ddeccc04b8a519b0300fc -sha256.linux-x86_64-gnu=bc33260c32acf78eade2ac41a9115f38e00404651fa42e3bb4c419e4f011c031 -sha256.linux-aarch64-gnu=d153adad1ff39b2e3caf0417f09d8bd9edd41939c7c67a3c4978a61e73fb9227 +sha256.macos-aarch64=c9c92100e2b2ff95a5e95055cfce46855da99ee082d21f19ccbb15e0a66bd185 +sha256.macos-x86_64=f3aaeabfc79bb43f92b971b5a8eefe59488525ae16145c17bcd6ba028325832a +sha256.linux-x86_64-gnu=f180eb9dfee3536b5017cb01e70369defff19f96ef4c351bf707e80d19ab739a +sha256.linux-aarch64-gnu=065b63064107172317b8d631bfc2ec08e22249695ecc8611def33fee589f26ca # platform id -> the libchdb file name inside the extracted tarball / the name we ship libname.macos-aarch64=libchdb.so @@ -53,13 +62,14 @@ libname.linux-aarch64-gnu=libchdb.so # # Must not exceed what the engine supports, or the package refuses to load for users in # between. These are the versions chdb-core's own release wheels declare -# (chdb_core-26.7.3-cp39-abi3-macosx_11_0_arm64.whl and ...-macosx_10_15_x86_64.whl), and +# (chdb_core-26.11.0-cp39-abi3-macosx_11_0_arm64.whl and ...-macosx_10_15_x86_64.whl), and # build-native.sh fails the build if the shim ends up above the engine's. # -# Re-checked against the v26.7.3 binaries rather than trusting the wheel names: -# `vtool -show-build libchdb.so` reports minos 11.0 for the arm64 asset and 10.15 for the -# x86_64 one, so the two values below still match what the engine will actually load on. -# Both assets were downloaded and read for this, not inferred from the previous baseline. +# Re-checked against the v26.11.0-rc.2 binaries rather than trusting the wheel names: the +# LC_BUILD_VERSION load command of each asset's libchdb.so (what `vtool -show-build` prints) +# says minos 11.0 for the arm64 asset and 10.15 for the x86_64 one, so the two values below +# still match what the engine will actually load on. Both assets were downloaded and read for +# this, not inferred from the previous baseline. # # Left unset, the target follows the build machine's SDK: an unpinned build on a macOS 26 # host produced a shim demanding macOS 26 beside an engine that runs on 11. @@ -77,11 +87,11 @@ deployment.target.macos-x86_64=10.15 # below it is out of support: RHEL 7 (2.17) ended June 2024 and Amazon Linux 2 (2.26) June # 2026. Everything above it is already covered. # -# Unchanged by the v26.7.3 move, checked two ways. Its Linux wheels carry the same -# manylinux2014/manylinux_2_17 tags v26.7.0's and v26.7.2-rc.2's did, and the released engines +# Unchanged by the v26.11.0-rc.2 move, checked two ways. Its Linux wheels carry the same +# manylinux2014/manylinux_2_17 tags every baseline since v26.7.0 has, and the released engines # themselves ask for less than that: the highest GLIBC_* symbol version in the x86_64 asset is -# GLIBC_2.4, and in the aarch64 asset GLIBC_2.17. So the engine's own floor did not rise and -# the ceiling still has room. +# still GLIBC_2.4, and in the aarch64 asset GLIBC_2.17. So the engine's own floor did not rise +# and the ceiling still has room. # # What this cannot check from a macOS host is the *shim's* floor, which is the thing the # ceiling actually guards. That is measured in the Linux jobs, where build-native.sh reads it diff --git a/scripts/verify-consumer.sh b/scripts/verify-consumer.sh index 8fdb4a4..a0c41cb 100755 --- a/scripts/verify-consumer.sh +++ b/scripts/verify-consumer.sh @@ -323,11 +323,23 @@ done # mirror lands there too. So the configuration is not trusted to be right; the result is read # back. # -# Maven writes _remote.repositories beside each downloaded file, recording the id of the -# repository that served it. Anything other than chdb-verify means this run did not test what -# it claims to: most likely the `central` block above stopped being disabled, or a -# * in the caller's settings.xml intercepted the file repository. Both are -# reasons to stop rather than to report a pass. +# Maven writes _remote.repositories beside each downloaded file, recording the repository that +# served it. Anything other than chdb-verify means this run did not test what it claims to: +# most likely the `central` block above stopped being disabled, or a * in +# the caller's settings.xml intercepted the file repository. Both are reasons to stop rather +# than to report a pass. +# +# How the repository is recorded depends on the Maven version. Up to 3.9 it is the bare id, +# `chdb-verify`. Maven 3.10 (resolver 2.0) records `-` +# instead -- measured, with 3.10.0 on the macOS runners: `chdb-verify-` followed by exactly +# `printf '%s' "file://${REPO}" | sha1sum`. Both forms are accepted, and the second only with +# the hash of this run's own repository URL, so it is no looser than the first: a mirror has +# neither the id nor the URL. +sha1_of_string() { + if command -v sha1sum >/dev/null 2>&1; then printf '%s' "$1" | sha1sum | cut -d' ' -f1 + else printf '%s' "$1" | shasum -a 1 | cut -d' ' -f1; fi +} +REPO_KEY_HURL="chdb-verify-$(sha1_of_string "file://${REPO}")" PROVENANCE_LINES=0 while IFS= read -r record; do while IFS= read -r line; do @@ -337,12 +349,14 @@ while IFS= read -r record; do PROVENANCE_LINES=$((PROVENANCE_LINES + 1)) case "$line" in *">chdb-verify="*) ;; + *">${REPO_KEY_HURL}="*) ;; *) die "a com.clickhouse.chdb artifact was served by a repository other than the throwaway one: ${record} ${line} -Only 'chdb-verify' proves the artifact under test is the one this run deployed. If a mirror in -your settings.xml claims '*', run this with -s pointing at a settings file that does not." +Only 'chdb-verify' (or, on Maven 3.10+, '${REPO_KEY_HURL}') proves the artifact under test is the +one this run deployed. If a mirror in your settings.xml claims '*', run this with -s pointing at +a settings file that does not." ;; esac done < "$record"