Skip to content

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

Open
xuantho573 wants to merge 39 commits into
masterfrom
feat/custom-metadata
Open

[DBX-6933] Feat: Support custom metadata element#932
xuantho573 wants to merge 39 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 1018.397ms ±3.59% 1077.795ms ±5.28% 🔴 +5.8%
25k 1511.545ms ±4.17% 1573.846ms ±4.25% ⚪ +4.1%

@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown

Coverage Report

Commit: a527c6b

Overall Coverage

Metric Coverage
Lines ✅ 85.43% (8812/10315)
Statements ✅ 82.66% (9546/11548)
Functions ✅ 88.33% (1846/2090)
Branches ⚠️ 73.38% (5611/7646)

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.52% ✅ 84.41% ✅ 90.91% ⚠️ 74.45%

⚠️ 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

83 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/diagnostics/provider.ts 0.00% 0.00% 0.00% 0.00%
src/compiler/queries/pipeline/interpret.ts 11.76% 13.51% 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/projectLayout/layout.ts 54.16% 53.84% 75.00% 52.63%
src/core/global_modules/enum/bind.ts 60.00% 62.50% 83.33% 37.50%
src/compiler/queries/legacy/parse.ts 61.53% 53.33% 66.66% 25.00%
src/core/local_modules/ref/index.ts 62.50% 61.76% 100.00% 57.14%
src/core/types/report.ts 62.50% 55.55% 75.00% 57.14%
src/core/global_modules/records/utils/data/values.ts 63.30% 55.71% 72.72% 49.28%
src/core/types/symbol/symbols.ts 63.56% 55.86% 60.16% 45.83%
src/core/parser/utils.ts 66.46% 66.86% 100.00% 73.22%
src/compiler/queries/legacy/token.ts 66.66% 66.66% 66.66% 100.00%
src/core/local_modules/program/index.ts 66.66% 69.23% 75.00% 62.50%
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/local_modules/custom/index.ts 70.58% 71.42% 80.00% 68.75%
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/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 78.12% 70.90% 78.94% 53.73%
src/core/types/filepath.ts 79.48% 78.57% 77.77% 70.37%
src/core/global_modules/utils.ts 79.54% 75.51% 72.72% 63.63%
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/note/validate.ts 80.00% 77.77% 82.35% 70.58%
src/core/local_modules/records/validate.ts 80.28% 80.55% 93.75% 72.30%
src/core/global_modules/ref/bind.ts 80.64% 80.64% 90.00% 70.00%
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/enum/validate.ts 82.25% 78.78% 81.25% 71.05%
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/parser/parser.ts 84.21% 84.44% 100.00% 75.79%
__tests__/utils/compiler.ts 84.39% 81.91% 100.00% 59.66%
__tests__/utils/mocks.ts 85.71% 86.20% 75.00% 100.00%
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/services/suggestions/provider.ts 87.11% 83.20% 92.53% 74.92%
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.76% 90.83% 75.00% 78.84%
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.78% 86.06% 96.29% 68.26%
src/core/local_modules/table/validate.ts 91.86% 92.51% 97.95% 79.62%
src/core/global_modules/schema/index.ts 92.26% 82.46% 91.66% 70.07%
src/core/types/symbol/metadata.ts 92.42% 77.55% 97.72% 62.06%
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/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.07% 91.45% 100.00% 69.76%
src/core/types/errors.ts 98.51% 98.51% 66.66% 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
Comment thread packages/dbml-parse/src/core/types/schemaJson.ts Outdated

@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.

Check test and lint nho

@xuantho573
xuantho573 force-pushed the feat/custom-metadata branch 2 times, most recently from 48ec6c6 to c1f1c9f Compare July 22, 2026 08:11
@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants