diff --git a/.github/duckdb-version b/.github/duckdb-version new file mode 100644 index 0000000..600e347 --- /dev/null +++ b/.github/duckdb-version @@ -0,0 +1 @@ +4ce2416bbf4996e191679c19316517ba03ce36f6 \ No newline at end of file diff --git a/.github/workflows/MainDistributionPipeline.yml b/.github/workflows/MainDistributionPipeline.yml index e75a401..f9c9163 100644 --- a/.github/workflows/MainDistributionPipeline.yml +++ b/.github/workflows/MainDistributionPipeline.yml @@ -12,11 +12,26 @@ concurrency: cancel-in-progress: true jobs: + # Pin the duckdb build to the commit our submodule references (.github/duckdb-version), instead of + # tracking duckdb main — otherwise upstream-main API drift breaks CI on changes unrelated to this repo. + get-duckdb-version: + name: Get DuckDB version + runs-on: ubuntu-latest + outputs: + duckdb_version: ${{ steps.version.outputs.duckdb_version }} + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: .github + - id: version + run: echo "duckdb_version=$(cat .github/duckdb-version)" >> $GITHUB_OUTPUT + duckdb-stable-build: name: Build extension binaries + needs: get-duckdb-version uses: duckdb/extension-ci-tools/.github/workflows/_extension_distribution.yml@main with: - duckdb_version: main + duckdb_version: ${{ needs.get-duckdb-version.outputs.duckdb_version }} ci_tools_version: main extension_name: fts @@ -26,7 +41,7 @@ jobs: uses: duckdb/extension-ci-tools/.github/workflows/_extension_deploy.yml@main secrets: inherit with: - duckdb_version: main + duckdb_version: ${{ needs.get-duckdb-version.outputs.duckdb_version }} ci_tools_version: main extension_name: fts @@ -34,7 +49,7 @@ jobs: name: Code Quality Check uses: duckdb/extension-ci-tools/.github/workflows/_extension_code_quality.yml@main with: - duckdb_version: main + duckdb_version: ${{ needs.get-duckdb-version.outputs.duckdb_version }} ci_tools_version: main extension_name: fts format_checks: 'format;tidy' \ No newline at end of file diff --git a/duckdb b/duckdb index 464b647..4ce2416 160000 --- a/duckdb +++ b/duckdb @@ -1 +1 @@ -Subproject commit 464b647e189de96096dc3afae1ed62c1224adc63 +Subproject commit 4ce2416bbf4996e191679c19316517ba03ce36f6 diff --git a/src/fts_indexing.cpp b/src/fts_indexing.cpp index e506f07..050915d 100644 --- a/src/fts_indexing.cpp +++ b/src/fts_indexing.cpp @@ -20,9 +20,11 @@ static QualifiedName GetQualifiedName(ClientContext &context, const string &qname_str) { auto qname = QualifiedName::Parse(qname_str); if (qname.Schema() == INVALID_SCHEMA) { - qname.SchemaMutable() = + return QualifiedName( + qname.Catalog(), ClientData::Get(context).catalog_search_path->GetDefaultSchema( - qname.Catalog()); + qname.Catalog()), + qname.Name()); } return qname; } @@ -82,8 +84,7 @@ static string GetFTSBuildDictTable(const QualifiedName &qname) { static bool TableExists(ClientContext &context, const QualifiedName &qname) { return Catalog::GetEntry( - context, qname.Catalog(), qname.Schema(), qname.Name(), - OnEntryNotFound::RETURN_NULL) != nullptr; + context, qname, OnEntryNotFound::RETURN_NULL) != nullptr; } static bool SupportsFTSTriggers(ClientContext &context, @@ -712,8 +713,7 @@ string FTSIndexing::CreateFTSIndexQuery(ClientContext &context, const FunctionParameters ¶meters) { auto qname = GetQualifiedName(context, StringValue::Get(parameters.values[0])); - Catalog::GetEntry(context, qname.Catalog(), qname.Schema(), - qname.Name()); + Catalog::GetEntry(context, qname); // Named parameters auto get_string = [&](const string &name, const string &def) { @@ -741,8 +741,7 @@ string FTSIndexing::CreateFTSIndexQuery(ClientContext &context, if (stopwords != "english" && stopwords != "none") { auto sw_qname = GetQualifiedName(context, stopwords); - Catalog::GetEntry(context, sw_qname.Catalog(), - sw_qname.Schema(), sw_qname.Name()); + Catalog::GetEntry(context, sw_qname); } const string fts_schema = GetFTSSchema(qname); @@ -760,8 +759,7 @@ string FTSIndexing::CreateFTSIndexQuery(ClientContext &context, // Positional parameters: table, id column, value column(s) const string doc_id = StringValue::Get(parameters.values[1]); - auto &table = Catalog::GetEntry( - context, qname.Catalog(), qname.Schema(), qname.Name()); + auto &table = Catalog::GetEntry(context, qname); if (!table.ColumnExists(Identifier(doc_id))) { throw CatalogException("Table '%s.%s' does not have a column named '%s'!", qname.Schema().GetIdentifierName(),