Skip to content

[DBX-6933] Feat: Support custom metadata element - #932

Merged
xuantho573 merged 42 commits into
masterfrom
feat/custom-metadata
Jul 31, 2026
Merged

[DBX-6933] Feat: Support custom metadata element#932
xuantho573 merged 42 commits into
masterfrom
feat/custom-metadata

Conversation

@xuantho573

@xuantho573 xuantho573 commented Jun 22, 2026

Copy link
Copy Markdown
Member

Summary

  • New syntax to attach custom metadata to other elements
Table users {
  id int [pk]
}

TableGroup group [
  color: #a00,
  owner: 'david' // Inline metadata
] {
  users
}

// Metadata block
Metadata Table users {
  owner: 'david'
}

Issue

(issue link here)

Lasting Changes (Technical)

(please list down: code changes/things that have wide-effect; new libraries/functions added that can be used by others; examples below)

  • Added metadata module (global and local)
  • Updated the method creating ElementDeclarationNode to catch next token as identifier for target kind if the element type is Metadata

Checklist

Please check directly on the box once each of these are done

  • Documentation (if necessary)
  • Lint Checks Passed
  • Unit Tests Passed
  • Coverage Tests Passed
  • Integration Tests Passed
  • Code Review

@linear-code

linear-code Bot commented Jun 22, 2026

Copy link
Copy Markdown

DBX-6933

@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown

Benchmark Result

dbml-parse

suite 🏠 master 🔀 this branch change
18k 1497.387ms ±8.19% 1596.493ms ±7.7% 🔴 +6.6%
25k 2163.439ms ±4.51% 2659.784ms ±7.25% 🔴 +22.9%

@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown

Coverage Report

Commit: 34cb1c2

Overall Coverage

Metric Coverage
Lines ✅ 85.40% (9062/10611)
Statements ✅ 82.52% (9839/11923)
Functions ✅ 87.76% (1900/2165)
Branches ⚠️ 73.56% (5840/7939)

Package Coverage

Package Lines Statements Functions Branches
dbml-cli ✅ 100.00% ✅ 100.00% ✅ 100.00% ✅ 100.00%
dbml-connector ⚠️ 64.62% ⚠️ 64.36% ⚠️ 59.53% ⚠️ 59.09%
dbml-core N/A N/A N/A N/A
dbml-parse ✅ 87.43% ✅ 84.20% ✅ 90.20% ⚠️ 74.60%

⚠️ Coverage Warnings

The following packages have coverage below 80%:

  • dbml-connector: 64.62% line coverage

Files with Coverage Below 80%

dbml-connector

9 file(s) below 80% coverage
File Lines Statements Functions Branches
src/connectors/bigquery/index.ts 0.00% 0.00% 0.00% 0.00%
src/utils/credential-loader.ts 0.00% 0.00% 0.00% 0.00%
src/utils/helpers.ts 0.00% 0.00% 0.00% 0.00%
src/connectors/snowflake/index.ts 10.56% 10.31% 0.00% 0.00%
src/utils/parseSchema.ts 46.15% 42.85% 28.57% 27.27%
src/connectors/connector.ts 66.66% 66.66% 100.00% 57.14%
src/connectors/oracle/tables.ts 71.25% 67.39% 100.00% 56.96%
src/connectors/oracle/index.ts 80.00% 80.76% 100.00% 25.00%
src/connectors/oracle/utils.ts 85.71% 85.71% 100.00% 71.42%

dbml-parse

87 file(s) below 80% coverage
File Lines Statements Functions Branches
src/compiler/queries/container/scope.ts 0.00% 0.00% 0.00% 0.00%
src/services/code_actions/provider.ts 0.00% 0.00% 0.00% 0.00%
src/services/diagnostics/provider.ts 0.00% 0.00% 0.00% 0.00%
src/compiler/queries/pipeline/interpret.ts 10.52% 12.19% 66.66% 41.66%
src/services/suggestions/crossFile.ts 19.35% 19.44% 33.33% 10.00%
src/core/local_modules/enum/index.ts 48.00% 46.29% 57.14% 52.63%
src/core/global_modules/project/interpret.ts 52.50% 46.66% 83.33% 23.07%
src/compiler/queries/legacy/parse.ts 53.84% 46.66% 50.00% 25.00%
src/compiler/projectLayout/layout.ts 54.16% 53.84% 75.00% 52.63%
src/core/local_modules/ref/index.ts 62.50% 61.76% 100.00% 57.14%
src/core/types/report.ts 62.96% 56.66% 76.92% 57.14%
src/core/global_modules/records/utils/data/values.ts 63.30% 55.71% 72.72% 49.28%
src/compiler/queries/legacy/token.ts 66.66% 66.66% 66.66% 100.00%
src/core/global_modules/enum/bind.ts 66.66% 68.75% 83.33% 50.00%
src/core/local_modules/program/index.ts 66.66% 69.23% 75.00% 62.50%
src/core/types/symbol/symbols.ts 67.36% 59.23% 61.71% 52.43%
src/core/global_modules/note/bind.ts 69.23% 71.42% 83.33% 50.00%
src/core/local_modules/checks/index.ts 69.23% 75.00% 100.00% 64.28%
src/core/local_modules/project/index.ts 69.23% 69.23% 100.00% 63.63%
src/core/parser/utils.ts 71.25% 71.59% 100.00% 79.52%
src/compiler/queries/utils.ts 73.10% 73.38% 90.90% 51.11%
src/core/global_modules/project/bind.ts 73.33% 75.00% 100.00% 50.00%
src/core/local_modules/indexes/index.ts 73.68% 69.35% 63.63% 64.28%
src/core/local_modules/tablePartial/validate.ts 73.91% 73.04% 81.33% 58.42%
src/core/local_modules/use/index.ts 73.91% 75.00% 75.00% 78.12%
src/core/local_modules/indexes/validate.ts 74.28% 74.66% 90.90% 56.00%
src/core/local_modules/note/index.ts 75.00% 75.86% 75.00% 72.72%
src/services/suggestions/utils/index.ts 75.00% 75.00% 100.00% 62.06%
src/core/local_modules/records/index.ts 75.60% 76.19% 100.00% 68.08%
src/core/local_modules/project/validate.ts 75.86% 75.86% 100.00% 56.25%
src/core/global_modules/indexes/bind.ts 76.31% 74.35% 90.90% 68.96%
src/core/local_modules/custom/index.ts 76.47% 76.19% 80.00% 75.00%
src/core/global_modules/records/utils/data/sqlTypes.ts 76.59% 80.64% 82.35% 72.22%
src/core/local_modules/metadata/index.ts 77.77% 76.92% 75.00% 75.00%
src/core/global_modules/tablePartial/interpret.ts 77.89% 70.64% 78.94% 53.84%
src/core/global_modules/utils.ts 78.94% 74.41% 70.00% 55.81%
src/core/types/relation.ts 79.31% 73.52% 58.33% 75.00%
src/core/types/filepath.ts 79.48% 78.57% 77.77% 70.37%
src/core/global_modules/program/utils.ts 80.00% 80.00% 100.00% 70.00%
src/core/global_modules/tableGroup/bind.ts 80.00% 80.00% 100.00% 57.14%
src/core/local_modules/records/validate.ts 80.28% 80.55% 93.75% 72.30%
src/core/global_modules/indexes/interpret.ts 81.39% 72.00% 100.00% 56.66%
src/core/local_modules/tablePartial/index.ts 81.48% 81.48% 100.00% 77.27%
src/core/local_modules/diagramView/validate.ts 81.57% 78.04% 84.21% 72.72%
src/core/local_modules/checks/validate.ts 81.63% 82.69% 93.75% 70.00%
src/core/local_modules/note/validate.ts 82.00% 81.48% 88.23% 73.52%
__tests__/utils/compiler.ts 82.26% 79.78% 100.00% 55.46%
src/core/global_modules/records/bind.ts 82.92% 83.72% 93.75% 67.30%
src/compiler/queries/container/token.ts 83.33% 85.71% 100.00% 75.00%
src/core/global_modules/ref/bind.ts 83.87% 83.87% 90.00% 75.00%
src/core/parser/parser.ts 84.93% 85.22% 100.00% 76.08%
src/services/suggestions/provider.ts 85.43% 81.67% 92.53% 73.37%
src/core/local_modules/enum/validate.ts 85.48% 81.81% 81.25% 76.31%
__tests__/utils/mocks.ts 85.71% 86.20% 75.00% 100.00%
src/core/utils/setting.ts 86.84% 82.97% 85.71% 72.22%
src/services/suggestions/utils/useMerger.ts 86.95% 81.13% 100.00% 46.34%
src/core/global_modules/tablePartial/bind.ts 87.03% 87.27% 100.00% 71.42%
src/core/local_modules/metadata/validate.ts 87.50% 85.41% 100.00% 71.87%
src/services/suggestions/recordRowSnippet.ts 88.46% 87.09% 100.00% 73.80%
src/compiler/queries/nodeAtPosition.ts 88.88% 90.00% 100.00% 75.00%
src/core/global_modules/diagramView/index.ts 89.16% 86.23% 83.33% 78.18%
src/core/global_modules/tableGroup/interpret.ts 89.58% 89.58% 100.00% 77.27%
src/compiler/index.ts 90.00% 90.07% 70.00% 76.92%
src/core/types/symbol/metadata.ts 90.86% 76.86% 94.00% 60.43%
src/core/global_modules/records/index.ts 90.90% 87.15% 100.00% 79.16%
src/core/global_modules/records/utils/constraints/pk.ts 91.66% 88.88% 93.75% 63.15%
src/core/global_modules/table/interpret.ts 91.72% 85.97% 96.29% 67.64%
src/core/global_modules/schema/index.ts 92.26% 82.46% 91.66% 70.07%
src/core/utils/interpret.ts 93.15% 90.00% 100.00% 71.79%
src/core/global_modules/diagramView/interpret.ts 94.59% 90.40% 92.85% 75.75%
src/services/suggestions/use.ts 94.68% 87.61% 100.00% 77.45%
src/core/global_modules/ref/interpret.ts 95.83% 94.11% 100.00% 78.84%
src/core/global_modules/records/interpret.ts 95.97% 92.59% 100.00% 79.54%
__tests__/examples/interpreter/multifile/utils.ts 96.00% 89.65% 100.00% 62.50%
src/core/global_modules/note/interpret.ts 96.29% 96.29% 100.00% 75.00%
src/compiler/queries/canonicalName.ts 96.96% 92.10% 100.00% 76.66%
src/core/global_modules/metadata/utils.ts 97.01% 90.58% 100.00% 75.55%
src/core/global_modules/program/interpret.ts 97.22% 91.82% 100.00% 69.76%
src/core/global_modules/tableGroup/index.ts 97.36% 91.30% 100.00% 78.78%
src/core/types/errors.ts 98.62% 98.62% 75.00% 100.00%
src/compiler/queries/transform/renameTable.ts 99.05% 90.47% 100.00% 78.82%
src/core/global_modules/checks/interpret.ts 100.00% 88.88% 100.00% 60.00%
src/core/global_modules/metadata/bind.ts 100.00% 89.47% 100.00% 75.00%
src/core/global_modules/metadata/interpret.ts 100.00% 80.00% 100.00% 58.33%
src/core/global_modules/program/index.ts 100.00% 85.71% 100.00% 75.00%
src/core/global_modules/records/utils/constraints/unique.ts 100.00% 94.28% 100.00% 58.33%
src/services/definition/provider.ts 100.00% 95.23% 100.00% 71.42%

@xuantho573
xuantho573 marked this pull request as ready for review June 24, 2026 02:18
@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch from 5ed7ff2 to 15457bb Compare June 29, 2026 04:28
@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch 12 times, most recently from 76bfb1a to 52c916e Compare July 8, 2026 01:50
Comment thread packages/dbml-core/src/model_structure/check.js Outdated
Comment thread packages/dbml-core/src/model_structure/config.js
Comment thread packages/dbml-core/src/model_structure/dbState.js
Comment thread packages/dbml-core/src/model_structure/table.js Outdated
Comment thread packages/dbml-core/types/model_structure/tableGroup.d.ts Outdated
Comment thread packages/dbml-parse/src/core/types/symbol/metadata.ts Outdated
Comment thread packages/dbml-parse/src/core/types/symbol/metadata.ts Outdated
Comment thread packages/dbml-parse/src/core/types/nodes.ts Outdated
Comment thread packages/dbml-parse/src/core/types/nodes.ts Outdated
Comment thread packages/dbml-parse/src/core/types/schemaJson.ts Outdated
Comment thread packages/dbml-parse/src/core/parser/parser.ts Outdated
Comment thread packages/dbml-parse/src/core/parser/parser.ts Outdated
Comment thread packages/dbml-parse/src/core/global_modules/utils.ts Outdated
@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch from c1f1c9f to c247c56 Compare July 22, 2026 08:19
- update llms.txt to reflect the new custom metadata syntax
- update github PR template to add 'update llms.txt' to checklist
@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch from e149293 to 43c3aa6 Compare July 22, 2026 10:50
@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch 2 times, most recently from ee9358d to eb0b5fa Compare July 23, 2026 06:56

@huydo862003 huydo862003 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please check if we have export metadata the direction from model structure -> DBML nho

@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch from eb0b5fa to 0322740 Compare July 23, 2026 07:53
@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch from 9b5601d to 88f75b9 Compare July 24, 2026 03:33
@xuantho573

xuantho573 commented Jul 24, 2026

Copy link
Copy Markdown
Member Author

Please check if we have export metadata the direction from model structure -> DBML nho

Added in 2fa15db nha @huydo862003

@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch 3 times, most recently from 9561a77 to 8457ee2 Compare July 29, 2026 11:07
@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch from 8457ee2 to 76b1a2c Compare July 29, 2026 11:11
@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch from ebcf8d3 to 3ba869e Compare July 30, 2026 06:28
@xuantho573
xuantho573 merged commit d9db6d1 into master Jul 31, 2026
8 checks passed
@xuantho573
xuantho573 deleted the feat/custom-metadata branch July 31, 2026 03:30
@xuantho573 xuantho573 added the PR: New Feature 🚀 A type of pull request used for changelog categories label Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

PR: New Feature 🚀 A type of pull request used for changelog categories

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants