callman-core 1.29.0 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/ai/prompts/diagram.d.ts.map +1 -1
  2. package/dist/ai/prompts/diagram.js +24 -7
  3. package/dist/ai/prompts/diagram.js.map +1 -1
  4. package/dist/ai/types.d.ts +1 -1
  5. package/dist/ai/types.d.ts.map +1 -1
  6. package/dist/diagram/componentCatalog.d.ts +3 -0
  7. package/dist/diagram/componentCatalog.d.ts.map +1 -1
  8. package/dist/diagram/componentCatalog.js +5 -1
  9. package/dist/diagram/componentCatalog.js.map +1 -1
  10. package/dist/diagram/database/derive.d.ts +14 -0
  11. package/dist/diagram/database/derive.d.ts.map +1 -0
  12. package/dist/diagram/database/derive.js +114 -0
  13. package/dist/diagram/database/derive.js.map +1 -0
  14. package/dist/diagram/database/diff.d.ts +48 -0
  15. package/dist/diagram/database/diff.d.ts.map +1 -0
  16. package/dist/diagram/database/diff.js +109 -0
  17. package/dist/diagram/database/diff.js.map +1 -0
  18. package/dist/diagram/database/edit.d.ts +113 -0
  19. package/dist/diagram/database/edit.d.ts.map +1 -0
  20. package/dist/diagram/database/edit.js +359 -0
  21. package/dist/diagram/database/edit.js.map +1 -0
  22. package/dist/diagram/database/fromSchema.d.ts +12 -0
  23. package/dist/diagram/database/fromSchema.d.ts.map +1 -0
  24. package/dist/diagram/database/fromSchema.js +182 -0
  25. package/dist/diagram/database/fromSchema.js.map +1 -0
  26. package/dist/diagram/database/index.d.ts +9 -0
  27. package/dist/diagram/database/index.d.ts.map +1 -0
  28. package/dist/diagram/database/index.js +14 -0
  29. package/dist/diagram/database/index.js.map +1 -0
  30. package/dist/diagram/database/model.d.ts +93 -0
  31. package/dist/diagram/database/model.d.ts.map +1 -0
  32. package/dist/diagram/database/model.js +294 -0
  33. package/dist/diagram/database/model.js.map +1 -0
  34. package/dist/diagram/database/patch.d.ts +14 -0
  35. package/dist/diagram/database/patch.d.ts.map +1 -0
  36. package/dist/diagram/database/patch.js +186 -0
  37. package/dist/diagram/database/patch.js.map +1 -0
  38. package/dist/diagram/database/place.d.ts +4 -0
  39. package/dist/diagram/database/place.d.ts.map +1 -0
  40. package/dist/diagram/database/place.js +22 -0
  41. package/dist/diagram/database/place.js.map +1 -0
  42. package/dist/diagram/database/types.d.ts +50 -0
  43. package/dist/diagram/database/types.d.ts.map +1 -0
  44. package/dist/diagram/database/types.js +106 -0
  45. package/dist/diagram/database/types.js.map +1 -0
  46. package/dist/diagram/index.d.ts +1 -0
  47. package/dist/diagram/index.d.ts.map +1 -1
  48. package/dist/diagram/index.js +1 -0
  49. package/dist/diagram/index.js.map +1 -1
  50. package/dist/diagram/layout.d.ts +1 -0
  51. package/dist/diagram/layout.d.ts.map +1 -1
  52. package/dist/diagram/layout.js +2 -1
  53. package/dist/diagram/layout.js.map +1 -1
  54. package/dist/diagram/ops.d.ts +1 -1
  55. package/dist/diagram/ops.d.ts.map +1 -1
  56. package/dist/diagram/ops.js +42 -0
  57. package/dist/diagram/ops.js.map +1 -1
  58. package/dist/diagram/opsReference.d.ts +1 -1
  59. package/dist/diagram/opsReference.d.ts.map +1 -1
  60. package/dist/diagram/opsReference.js +9 -0
  61. package/dist/diagram/opsReference.js.map +1 -1
  62. package/dist/diagram/patchInput.d.ts +65 -1
  63. package/dist/diagram/patchInput.d.ts.map +1 -1
  64. package/dist/diagram/patchInput.js +414 -11
  65. package/dist/diagram/patchInput.js.map +1 -1
  66. package/dist/diagram/schema.d.ts +2 -2
  67. package/dist/diagram/schema.d.ts.map +1 -1
  68. package/dist/diagram/schema.js +3 -3
  69. package/dist/diagram/schema.js.map +1 -1
  70. package/dist/diagram/views.d.ts +13 -0
  71. package/dist/diagram/views.d.ts.map +1 -1
  72. package/dist/diagram/views.js +49 -0
  73. package/dist/diagram/views.js.map +1 -1
  74. package/dist/host/db/introspection/index.d.ts +9 -0
  75. package/dist/host/db/introspection/index.d.ts.map +1 -0
  76. package/dist/host/db/introspection/index.js +35 -0
  77. package/dist/host/db/introspection/index.js.map +1 -0
  78. package/dist/host/db/introspection/mongo.d.ts +7 -0
  79. package/dist/host/db/introspection/mongo.d.ts.map +1 -0
  80. package/dist/host/db/introspection/mongo.js +183 -0
  81. package/dist/host/db/introspection/mongo.js.map +1 -0
  82. package/dist/host/db/introspection/mssql.d.ts +6 -0
  83. package/dist/host/db/introspection/mssql.d.ts.map +1 -0
  84. package/dist/host/db/introspection/mssql.js +211 -0
  85. package/dist/host/db/introspection/mssql.js.map +1 -0
  86. package/dist/host/db/introspection/mysql.d.ts +5 -0
  87. package/dist/host/db/introspection/mysql.d.ts.map +1 -0
  88. package/dist/host/db/introspection/mysql.js +163 -0
  89. package/dist/host/db/introspection/mysql.js.map +1 -0
  90. package/dist/host/db/introspection/oracle.d.ts +12 -0
  91. package/dist/host/db/introspection/oracle.d.ts.map +1 -0
  92. package/dist/host/db/introspection/oracle.js +225 -0
  93. package/dist/host/db/introspection/oracle.js.map +1 -0
  94. package/dist/host/db/introspection/postgres.d.ts +5 -0
  95. package/dist/host/db/introspection/postgres.d.ts.map +1 -0
  96. package/dist/host/db/introspection/postgres.js +172 -0
  97. package/dist/host/db/introspection/postgres.js.map +1 -0
  98. package/dist/host/db/introspection/shared.d.ts +29 -0
  99. package/dist/host/db/introspection/shared.d.ts.map +1 -0
  100. package/dist/host/db/introspection/shared.js +119 -0
  101. package/dist/host/db/introspection/shared.js.map +1 -0
  102. package/dist/host/db/introspection/types.d.ts +58 -0
  103. package/dist/host/db/introspection/types.d.ts.map +1 -0
  104. package/dist/host/db/introspection/types.js +6 -0
  105. package/dist/host/db/introspection/types.js.map +1 -0
  106. package/dist/host/db/mongoAdapter.d.ts +1 -0
  107. package/dist/host/db/mongoAdapter.d.ts.map +1 -1
  108. package/dist/host/db/mongoAdapter.js +13 -0
  109. package/dist/host/db/mongoAdapter.js.map +1 -1
  110. package/dist/host/db/mssqlAdapter.d.ts +1 -0
  111. package/dist/host/db/mssqlAdapter.d.ts.map +1 -1
  112. package/dist/host/db/mssqlAdapter.js +3 -1
  113. package/dist/host/db/mssqlAdapter.js.map +1 -1
  114. package/dist/host/db/mysqlAdapter.d.ts +1 -0
  115. package/dist/host/db/mysqlAdapter.d.ts.map +1 -1
  116. package/dist/host/db/mysqlAdapter.js +11 -0
  117. package/dist/host/db/mysqlAdapter.js.map +1 -1
  118. package/dist/host/db/oracleAdapter.d.ts +1 -0
  119. package/dist/host/db/oracleAdapter.d.ts.map +1 -1
  120. package/dist/host/db/oracleAdapter.js +22 -0
  121. package/dist/host/db/oracleAdapter.js.map +1 -1
  122. package/dist/host/db/postgresAdapter.d.ts +1 -0
  123. package/dist/host/db/postgresAdapter.d.ts.map +1 -1
  124. package/dist/host/db/postgresAdapter.js +13 -0
  125. package/dist/host/db/postgresAdapter.js.map +1 -1
  126. package/dist/host/db/queryExecutor.d.ts +2 -1
  127. package/dist/host/db/queryExecutor.d.ts.map +1 -1
  128. package/dist/host/db/queryExecutor.js +1 -1
  129. package/dist/host/db/queryExecutor.js.map +1 -1
  130. package/dist/host/index.d.ts +7 -0
  131. package/dist/host/index.d.ts.map +1 -1
  132. package/dist/host/index.js +9 -0
  133. package/dist/host/index.js.map +1 -1
  134. package/dist-cjs/ai/prompts/diagram.js +23 -6
  135. package/dist-cjs/ai/prompts/diagram.js.map +1 -1
  136. package/dist-cjs/diagram/componentCatalog.js +5 -1
  137. package/dist-cjs/diagram/componentCatalog.js.map +1 -1
  138. package/dist-cjs/diagram/database/derive.js +119 -0
  139. package/dist-cjs/diagram/database/derive.js.map +1 -0
  140. package/dist-cjs/diagram/database/diff.js +115 -0
  141. package/dist-cjs/diagram/database/diff.js.map +1 -0
  142. package/dist-cjs/diagram/database/edit.js +366 -0
  143. package/dist-cjs/diagram/database/edit.js.map +1 -0
  144. package/dist-cjs/diagram/database/fromSchema.js +188 -0
  145. package/dist-cjs/diagram/database/fromSchema.js.map +1 -0
  146. package/dist-cjs/diagram/database/index.js +32 -0
  147. package/dist-cjs/diagram/database/index.js.map +1 -0
  148. package/dist-cjs/diagram/database/model.js +311 -0
  149. package/dist-cjs/diagram/database/model.js.map +1 -0
  150. package/dist-cjs/diagram/database/patch.js +190 -0
  151. package/dist-cjs/diagram/database/patch.js.map +1 -0
  152. package/dist-cjs/diagram/database/place.js +26 -0
  153. package/dist-cjs/diagram/database/place.js.map +1 -0
  154. package/dist-cjs/diagram/database/types.js +122 -0
  155. package/dist-cjs/diagram/database/types.js.map +1 -0
  156. package/dist-cjs/diagram/index.js +1 -0
  157. package/dist-cjs/diagram/index.js.map +1 -1
  158. package/dist-cjs/diagram/layout.js +3 -2
  159. package/dist-cjs/diagram/layout.js.map +1 -1
  160. package/dist-cjs/diagram/ops.js +42 -0
  161. package/dist-cjs/diagram/ops.js.map +1 -1
  162. package/dist-cjs/diagram/opsReference.js +9 -0
  163. package/dist-cjs/diagram/opsReference.js.map +1 -1
  164. package/dist-cjs/diagram/patchInput.js +414 -11
  165. package/dist-cjs/diagram/patchInput.js.map +1 -1
  166. package/dist-cjs/diagram/schema.js +3 -3
  167. package/dist-cjs/diagram/schema.js.map +1 -1
  168. package/dist-cjs/diagram/views.js +51 -1
  169. package/dist-cjs/diagram/views.js.map +1 -1
  170. package/dist-cjs/host/db/introspection/index.js +59 -0
  171. package/dist-cjs/host/db/introspection/index.js.map +1 -0
  172. package/dist-cjs/host/db/introspection/mongo.js +189 -0
  173. package/dist-cjs/host/db/introspection/mongo.js.map +1 -0
  174. package/dist-cjs/host/db/introspection/mssql.js +216 -0
  175. package/dist-cjs/host/db/introspection/mssql.js.map +1 -0
  176. package/dist-cjs/host/db/introspection/mysql.js +167 -0
  177. package/dist-cjs/host/db/introspection/mysql.js.map +1 -0
  178. package/dist-cjs/host/db/introspection/oracle.js +230 -0
  179. package/dist-cjs/host/db/introspection/oracle.js.map +1 -0
  180. package/dist-cjs/host/db/introspection/postgres.js +176 -0
  181. package/dist-cjs/host/db/introspection/postgres.js.map +1 -0
  182. package/dist-cjs/host/db/introspection/shared.js +133 -0
  183. package/dist-cjs/host/db/introspection/shared.js.map +1 -0
  184. package/dist-cjs/host/db/introspection/types.js +7 -0
  185. package/dist-cjs/host/db/introspection/types.js.map +1 -0
  186. package/dist-cjs/host/db/mongoAdapter.js +15 -1
  187. package/dist-cjs/host/db/mongoAdapter.js.map +1 -1
  188. package/dist-cjs/host/db/mssqlAdapter.js +5 -2
  189. package/dist-cjs/host/db/mssqlAdapter.js.map +1 -1
  190. package/dist-cjs/host/db/mysqlAdapter.js +13 -1
  191. package/dist-cjs/host/db/mysqlAdapter.js.map +1 -1
  192. package/dist-cjs/host/db/oracleAdapter.js +24 -1
  193. package/dist-cjs/host/db/oracleAdapter.js.map +1 -1
  194. package/dist-cjs/host/db/postgresAdapter.js +15 -1
  195. package/dist-cjs/host/db/postgresAdapter.js.map +1 -1
  196. package/dist-cjs/host/db/queryExecutor.js +5 -4
  197. package/dist-cjs/host/db/queryExecutor.js.map +1 -1
  198. package/dist-cjs/host/index.js +24 -1
  199. package/dist-cjs/host/index.js.map +1 -1
  200. package/package.json +1 -1
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ // MongoDB introspection: collections and views of the connection's database,
3
+ // their indexes, and FIELDS INFERRED from a sample of documents (there is no
4
+ // schema to read). Nothing is invented: no relationships, no types beyond
5
+ // what the sample shows. A field seen in only some documents is nullable.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.introspectMongo = exports.fieldsFromSample = exports.bsonTypeOf = void 0;
8
+ const mongoAdapter_js_1 = require("../mongoAdapter.js");
9
+ const shared_js_1 = require("./shared.js");
10
+ // The BSON type of a value, named the way the Mongo shell names them.
11
+ const bsonTypeOf = (value) => {
12
+ if (value === null || value === undefined)
13
+ return "null";
14
+ if (Array.isArray(value))
15
+ return "array";
16
+ if (value instanceof Date)
17
+ return "date";
18
+ if (value instanceof RegExp)
19
+ return "regex";
20
+ switch (typeof value) {
21
+ case "string":
22
+ return "string";
23
+ case "boolean":
24
+ return "bool";
25
+ case "number":
26
+ return Number.isInteger(value) ? "int" : "double";
27
+ case "bigint":
28
+ return "long";
29
+ case "object":
30
+ break;
31
+ default:
32
+ return "mixed";
33
+ }
34
+ const tagged = value;
35
+ switch (tagged._bsontype) {
36
+ case "ObjectId":
37
+ case "ObjectID":
38
+ return "objectId";
39
+ case "Decimal128":
40
+ return "decimal";
41
+ case "Long":
42
+ return "long";
43
+ case "Int32":
44
+ return "int";
45
+ case "Double":
46
+ return "double";
47
+ case "Binary":
48
+ return tagged.sub_type === 4 ? "uuid" : "binary";
49
+ case "Timestamp":
50
+ return "timestamp";
51
+ case "BSONRegExp":
52
+ return "regex";
53
+ case "MinKey":
54
+ return "minKey";
55
+ case "MaxKey":
56
+ return "maxKey";
57
+ case "Code":
58
+ return "javascript";
59
+ default:
60
+ break;
61
+ }
62
+ if (typeof Buffer !== "undefined" && Buffer.isBuffer(value))
63
+ return "binary";
64
+ return "object";
65
+ };
66
+ exports.bsonTypeOf = bsonTypeOf;
67
+ const isPlainObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value) && !(value instanceof Date) && !(value instanceof RegExp) && !value._bsontype && !(typeof Buffer !== "undefined" && Buffer.isBuffer(value));
68
+ const observe = (stats, doc, depth) => {
69
+ for (const [key, value] of Object.entries(doc)) {
70
+ let field = stats.get(key);
71
+ if (!field) {
72
+ field = { order: stats.size, present: 0, types: new Map() };
73
+ stats.set(key, field);
74
+ }
75
+ field.present += 1;
76
+ let type = (0, exports.bsonTypeOf)(value);
77
+ if (type === "array") {
78
+ const items = value.slice(0, 20).map(exports.bsonTypeOf).filter((item) => item !== "null");
79
+ const unique = [...new Set(items)];
80
+ type = unique.length === 1 ? `array<${unique[0]}>` : "array";
81
+ }
82
+ field.types.set(type, (field.types.get(type) ?? 0) + 1);
83
+ if (type === "object" && depth < 2 && isPlainObject(value)) {
84
+ field.nested ??= new Map();
85
+ observe(field.nested, value, depth + 1);
86
+ }
87
+ }
88
+ };
89
+ // Fields sampled from documents → columns; nested objects contribute dotted
90
+ // fields ("profile.city") after their parent.
91
+ const fieldsFromSample = (docs) => {
92
+ const stats = new Map();
93
+ const total = docs.length;
94
+ for (const doc of docs)
95
+ if (isPlainObject(doc))
96
+ observe(stats, doc, 0);
97
+ const columns = [];
98
+ const emit = (fields, prefix, parentPresent) => {
99
+ const ordered = [...fields.entries()].sort((a, b) => (a[0] === "_id" ? -1 : b[0] === "_id" ? 1 : a[1].order - b[1].order));
100
+ for (const [name, field] of ordered) {
101
+ const seen = [...field.types.entries()].sort((a, b) => b[1] - a[1]).map(([type]) => type);
102
+ // An empty array says nothing about the element type: "array" folds into "array<T>" when one was seen.
103
+ const types = seen.some((type) => type.startsWith("array<")) ? seen.filter((type) => type !== "array") : seen;
104
+ const nonNull = types.filter((type) => type !== "null");
105
+ const path = prefix ? `${prefix}.${name}` : name;
106
+ columns.push({
107
+ name: path,
108
+ dataType: nonNull.length > 0 ? nonNull.join(" | ") : "null",
109
+ ordinal: columns.length + 1,
110
+ nullable: field.present < parentPresent || types.includes("null"),
111
+ primaryKey: path === "_id",
112
+ metadata: { presence: parentPresent > 0 ? Math.round((field.present / parentPresent) * 100) / 100 : 0, bsonTypes: types },
113
+ });
114
+ if (field.nested)
115
+ emit(field.nested, path, field.present);
116
+ }
117
+ };
118
+ emit(stats, "", total);
119
+ return columns;
120
+ };
121
+ exports.fieldsFromSample = fieldsFromSample;
122
+ const indexesFrom = (specs) => specs
123
+ .map((spec) => spec)
124
+ .filter((spec) => spec && spec.key && typeof spec.key === "object")
125
+ .map((spec) => ({
126
+ name: String(spec.name ?? Object.keys(spec.key ?? {}).join("_")),
127
+ columns: Object.keys(spec.key ?? {}),
128
+ unique: Boolean(spec.unique) || spec.name === "_id_",
129
+ ...(spec.name === "_id_" ? { primary: true } : {}),
130
+ }));
131
+ const introspectMongo = (connection, options) => (0, mongoAdapter_js_1.withMongoClient)(connection, async (client, databaseName) => {
132
+ const warnings = [];
133
+ const db = client.db(databaseName);
134
+ const infos = (await db.listCollections({}, { nameOnly: false }).toArray());
135
+ const candidates = infos
136
+ .filter((info) => !info.name.startsWith("system."))
137
+ .sort((a, b) => a.name.localeCompare(b.name))
138
+ .map((info) => ({ name: info.name, kind: info.type === "view" ? "view" : "collection" }));
139
+ const { selected, truncated } = (0, shared_js_1.selectTables)(candidates, options);
140
+ const tables = [];
141
+ for (const candidate of selected) {
142
+ const table = { name: candidate.name, kind: candidate.kind, columns: [], primaryKey: [], foreignKeys: [], indexes: [] };
143
+ if (!options.objectsOnly) {
144
+ const collection = db.collection(candidate.name);
145
+ if (candidate.kind === "collection") {
146
+ try {
147
+ table.rowCountEstimate = Number(await collection.estimatedDocumentCount());
148
+ }
149
+ catch {
150
+ // A view, or a role without count rights: the estimate is optional.
151
+ }
152
+ try {
153
+ table.indexes = indexesFrom(await collection.indexes());
154
+ }
155
+ catch (error) {
156
+ warnings.push(`Indexes of ${candidate.name} could not be read: ${error instanceof Error ? error.message : String(error)}`);
157
+ }
158
+ }
159
+ try {
160
+ const docs = candidate.kind === "collection"
161
+ ? await collection.aggregate([{ $sample: { size: options.sampleSize } }]).toArray()
162
+ : await collection.find({}).limit(options.sampleSize).toArray();
163
+ table.columns = (0, exports.fieldsFromSample)(docs);
164
+ if (docs.length === 0)
165
+ warnings.push(`${candidate.name} is empty — no fields could be inferred.`);
166
+ }
167
+ catch (error) {
168
+ warnings.push(`Documents of ${candidate.name} could not be sampled: ${error instanceof Error ? error.message : String(error)}`);
169
+ }
170
+ table.primaryKey = table.columns.some((column) => column.name === "_id") ? ["_id"] : [];
171
+ const unique = new Set(table.indexes.filter((index) => index.unique && index.columns.length === 1).map((index) => index.columns[0]));
172
+ for (const column of table.columns)
173
+ if (unique.has(column.name) && column.name !== "_id")
174
+ column.unique = true;
175
+ }
176
+ tables.push(table);
177
+ }
178
+ return {
179
+ dialect: "mongo",
180
+ database: databaseName,
181
+ schemas: [],
182
+ tables,
183
+ capturedAt: new Date().toISOString(),
184
+ warnings,
185
+ ...(truncated ? { truncated: true } : {}),
186
+ };
187
+ });
188
+ exports.introspectMongo = introspectMongo;
189
+ //# sourceMappingURL=mongo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../../../src/host/db/introspection/mongo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ // SQL Server schema introspection over the sys.* catalog views (one pool, six
3
+ // queries). Schema/table filters apply in JavaScript: T-SQL has no array
4
+ // parameter and building an IN list from user text is not worth the risk.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.introspectMssql = exports.formatMssqlType = void 0;
7
+ const mssqlAdapter_js_1 = require("../mssqlAdapter.js");
8
+ const shared_js_1 = require("./shared.js");
9
+ const SCHEMAS_SQL = `
10
+ SELECT s.name AS sch FROM sys.schemas s
11
+ WHERE s.name NOT IN ('sys', 'INFORMATION_SCHEMA', 'guest') AND s.name NOT LIKE 'db[_]%'
12
+ ORDER BY 1`;
13
+ const TABLES_SQL = `
14
+ SELECT s.name AS sch, t.name AS tbl, 'table' AS kind, CAST(ep.value AS nvarchar(4000)) AS comment, p.total_rows AS estimate
15
+ FROM sys.tables t
16
+ JOIN sys.schemas s ON s.schema_id = t.schema_id
17
+ LEFT JOIN sys.extended_properties ep ON ep.major_id = t.object_id AND ep.minor_id = 0 AND ep.class = 1 AND ep.name = 'MS_Description'
18
+ LEFT JOIN (SELECT object_id, SUM(rows) AS total_rows FROM sys.partitions WHERE index_id IN (0, 1) GROUP BY object_id) p ON p.object_id = t.object_id
19
+ UNION ALL
20
+ SELECT s.name, v.name, 'view', CAST(ep.value AS nvarchar(4000)), NULL
21
+ FROM sys.views v
22
+ JOIN sys.schemas s ON s.schema_id = v.schema_id
23
+ LEFT JOIN sys.extended_properties ep ON ep.major_id = v.object_id AND ep.minor_id = 0 AND ep.class = 1 AND ep.name = 'MS_Description'
24
+ ORDER BY 1, 2`;
25
+ const COLUMNS_SQL = `
26
+ SELECT s.name AS sch, o.name AS tbl, c.name AS col, c.column_id AS ordinal, ty.name AS type_name,
27
+ c.max_length, c.precision, c.scale, c.is_nullable AS nullable, c.is_identity AS is_identity, c.is_computed AS is_computed,
28
+ dc.definition AS default_value, CAST(ep.value AS nvarchar(4000)) AS comment
29
+ FROM sys.columns c
30
+ JOIN sys.objects o ON o.object_id = c.object_id AND o.type IN ('U', 'V')
31
+ JOIN sys.schemas s ON s.schema_id = o.schema_id
32
+ JOIN sys.types ty ON ty.user_type_id = c.user_type_id
33
+ LEFT JOIN sys.default_constraints dc ON dc.parent_object_id = c.object_id AND dc.parent_column_id = c.column_id
34
+ LEFT JOIN sys.extended_properties ep ON ep.major_id = c.object_id AND ep.minor_id = c.column_id AND ep.class = 1 AND ep.name = 'MS_Description'
35
+ ORDER BY 1, 2, 4`;
36
+ const KEYS_SQL = `
37
+ SELECT s.name AS sch, o.name AS tbl, kc.name AS cname, kc.type AS ctype, col.name AS col, ic.key_ordinal AS pos
38
+ FROM sys.key_constraints kc
39
+ JOIN sys.objects o ON o.object_id = kc.parent_object_id
40
+ JOIN sys.schemas s ON s.schema_id = o.schema_id
41
+ JOIN sys.index_columns ic ON ic.object_id = kc.parent_object_id AND ic.index_id = kc.unique_index_id AND ic.is_included_column = 0
42
+ JOIN sys.columns col ON col.object_id = ic.object_id AND col.column_id = ic.column_id
43
+ ORDER BY 1, 2, 3, 6`;
44
+ const FOREIGN_KEYS_SQL = `
45
+ SELECT s.name AS sch, o.name AS tbl, fk.name AS cname, pc.name AS col, fkc.constraint_column_id AS pos,
46
+ rs.name AS ref_sch, ro.name AS ref_tbl, rc.name AS ref_col,
47
+ fk.delete_referential_action_desc AS on_delete, fk.update_referential_action_desc AS on_update
48
+ FROM sys.foreign_keys fk
49
+ JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
50
+ JOIN sys.objects o ON o.object_id = fk.parent_object_id
51
+ JOIN sys.schemas s ON s.schema_id = o.schema_id
52
+ JOIN sys.columns pc ON pc.object_id = fkc.parent_object_id AND pc.column_id = fkc.parent_column_id
53
+ JOIN sys.objects ro ON ro.object_id = fk.referenced_object_id
54
+ JOIN sys.schemas rs ON rs.schema_id = ro.schema_id
55
+ JOIN sys.columns rc ON rc.object_id = fkc.referenced_object_id AND rc.column_id = fkc.referenced_column_id
56
+ ORDER BY 1, 2, 3, 5`;
57
+ const INDEXES_SQL = `
58
+ SELECT s.name AS sch, o.name AS tbl, i.name AS name, i.is_unique AS is_unique, i.is_primary_key AS is_primary, col.name AS col, ic.key_ordinal AS pos
59
+ FROM sys.indexes i
60
+ JOIN sys.objects o ON o.object_id = i.object_id AND o.type IN ('U', 'V')
61
+ JOIN sys.schemas s ON s.schema_id = o.schema_id
62
+ JOIN sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id AND ic.is_included_column = 0
63
+ JOIN sys.columns col ON col.object_id = ic.object_id AND col.column_id = ic.column_id
64
+ WHERE i.name IS NOT NULL AND i.type > 0
65
+ ORDER BY 1, 2, 3, 7`;
66
+ // The type the way SSMS prints it: nvarchar(120), varchar(max), decimal(12,2), datetime2(7).
67
+ const formatMssqlType = (typeName, maxLength, precision, scale) => {
68
+ const name = typeName.toLowerCase();
69
+ if (["varchar", "char", "varbinary", "binary"].includes(name))
70
+ return maxLength === -1 ? `${name}(max)` : maxLength !== undefined ? `${name}(${maxLength})` : name;
71
+ if (["nvarchar", "nchar"].includes(name))
72
+ return maxLength === -1 ? `${name}(max)` : maxLength !== undefined ? `${name}(${Math.floor(maxLength / 2)})` : name;
73
+ if (["decimal", "numeric"].includes(name))
74
+ return precision !== undefined ? `${name}(${precision},${scale ?? 0})` : name;
75
+ if (["datetime2", "time", "datetimeoffset"].includes(name))
76
+ return scale !== undefined ? `${name}(${scale})` : name;
77
+ return name;
78
+ };
79
+ exports.formatMssqlType = formatMssqlType;
80
+ const introspectMssql = (connection, options) => (0, mssqlAdapter_js_1.withMssqlPool)(connection, async (pool) => {
81
+ const query = async (sql) => {
82
+ const result = await pool.request().query(sql);
83
+ return Array.isArray(result?.recordset) ? result.recordset : [];
84
+ };
85
+ const warnings = [];
86
+ const databaseRow = (await query("SELECT DB_NAME() AS db"))[0];
87
+ const schemas = (await query(SCHEMAS_SQL)).map((row) => String(row.sch));
88
+ const lower = (value) => value.toLowerCase();
89
+ const wanted = options.schemas ? options.schemas.filter((name) => schemas.some((known) => lower(known) === lower(name))).map((name) => schemas.find((known) => lower(known) === lower(name)) ?? name) : schemas;
90
+ for (const name of options.schemas ?? [])
91
+ if (!schemas.some((known) => lower(known) === lower(name)))
92
+ warnings.push(`Schema "${name}" is not visible to this connection.`);
93
+ const wantedSet = new Set(wanted.map(lower));
94
+ const inScope = (schema) => wantedSet.has(lower(String(schema)));
95
+ const candidates = (await query(TABLES_SQL))
96
+ .filter((row) => inScope(row.sch))
97
+ .map((row) => ({
98
+ schema: String(row.sch),
99
+ name: String(row.tbl),
100
+ kind: String(row.kind) === "view" ? "view" : "table",
101
+ comment: (0, shared_js_1.asString)(row.comment),
102
+ estimate: (0, shared_js_1.asNumber)(row.estimate),
103
+ }));
104
+ const { selected, truncated } = (0, shared_js_1.selectTables)(candidates, options);
105
+ const tables = new Map();
106
+ for (const candidate of selected) {
107
+ tables.set((0, shared_js_1.tableKey)(candidate.schema, candidate.name), (0, shared_js_1.emptyTable)(candidate, {
108
+ ...(candidate.comment ? { comment: candidate.comment } : {}),
109
+ ...(candidate.estimate !== undefined ? { rowCountEstimate: candidate.estimate } : {}),
110
+ }));
111
+ }
112
+ if (!options.objectsOnly && tables.size > 0) {
113
+ const tableOf = (row) => tables.get((0, shared_js_1.tableKey)(String(row.sch), String(row.tbl)));
114
+ for (const row of await query(COLUMNS_SQL)) {
115
+ const table = tableOf(row);
116
+ if (!table)
117
+ continue;
118
+ const defaultValue = (0, shared_js_1.asString)(row.default_value);
119
+ table.columns.push({
120
+ name: String(row.col),
121
+ dataType: (0, exports.formatMssqlType)(String(row.type_name), (0, shared_js_1.asNumber)(row.max_length), (0, shared_js_1.asNumber)(row.precision), (0, shared_js_1.asNumber)(row.scale)),
122
+ ordinal: (0, shared_js_1.asNumber)(row.ordinal) ?? table.columns.length + 1,
123
+ nullable: (0, shared_js_1.asBoolean)(row.nullable),
124
+ primaryKey: false,
125
+ ...(defaultValue !== undefined ? { defaultValue } : {}),
126
+ ...((0, shared_js_1.asBoolean)(row.is_identity) ? { autoIncrement: true } : {}),
127
+ ...((0, shared_js_1.asString)(row.comment) ? { comment: (0, shared_js_1.asString)(row.comment) } : {}),
128
+ ...((0, shared_js_1.asBoolean)(row.is_computed) ? { metadata: { computed: true } } : {}),
129
+ });
130
+ }
131
+ const keyGroups = new Map();
132
+ for (const row of await query(KEYS_SQL)) {
133
+ const table = tableOf(row);
134
+ if (!table)
135
+ continue;
136
+ const key = `${row.sch}.${row.tbl}.${row.cname}`;
137
+ let group = keyGroups.get(key);
138
+ if (!group) {
139
+ group = { table, name: String(row.cname), type: String(row.ctype).trim().toUpperCase(), columns: [] };
140
+ keyGroups.set(key, group);
141
+ }
142
+ group.columns.push(String(row.col));
143
+ }
144
+ for (const group of keyGroups.values()) {
145
+ if (group.type === "PK")
146
+ group.table.primaryKey = group.columns;
147
+ else
148
+ group.table.indexes.push({ name: group.name, columns: group.columns, unique: true });
149
+ }
150
+ const fkGroups = new Map();
151
+ for (const row of await query(FOREIGN_KEYS_SQL)) {
152
+ const table = tableOf(row);
153
+ if (!table)
154
+ continue;
155
+ const key = `${row.sch}.${row.tbl}.${row.cname}`;
156
+ let group = fkGroups.get(key);
157
+ if (!group) {
158
+ group = {
159
+ table,
160
+ name: String(row.cname),
161
+ columns: [],
162
+ refSchema: String(row.ref_sch),
163
+ refTable: String(row.ref_tbl),
164
+ refColumns: [],
165
+ ...((0, shared_js_1.referentialAction)(row.on_delete) ? { onDelete: (0, shared_js_1.referentialAction)(row.on_delete) } : {}),
166
+ ...((0, shared_js_1.referentialAction)(row.on_update) ? { onUpdate: (0, shared_js_1.referentialAction)(row.on_update) } : {}),
167
+ };
168
+ fkGroups.set(key, group);
169
+ }
170
+ group.columns.push(String(row.col));
171
+ group.refColumns.push(String(row.ref_col));
172
+ }
173
+ for (const group of fkGroups.values()) {
174
+ group.table.foreignKeys.push({
175
+ name: group.name,
176
+ columns: group.columns,
177
+ refSchema: group.refSchema,
178
+ refTable: group.refTable,
179
+ refColumns: group.refColumns,
180
+ ...(group.onDelete ? { onDelete: group.onDelete } : {}),
181
+ ...(group.onUpdate ? { onUpdate: group.onUpdate } : {}),
182
+ });
183
+ }
184
+ const indexGroups = new Map();
185
+ for (const row of await query(INDEXES_SQL)) {
186
+ const table = tableOf(row);
187
+ if (!table)
188
+ continue;
189
+ const key = `${row.sch}.${row.tbl}.${row.name}`;
190
+ let group = indexGroups.get(key);
191
+ if (!group) {
192
+ group = { table, name: String(row.name), unique: (0, shared_js_1.asBoolean)(row.is_unique), primary: (0, shared_js_1.asBoolean)(row.is_primary), columns: [] };
193
+ indexGroups.set(key, group);
194
+ }
195
+ group.columns.push(String(row.col));
196
+ }
197
+ for (const group of indexGroups.values()) {
198
+ if (group.table.indexes.some((index) => index.name === group.name))
199
+ continue;
200
+ group.table.indexes.push({ name: group.name, columns: group.columns, unique: group.unique, ...(group.primary ? { primary: true } : {}) });
201
+ }
202
+ for (const table of tables.values())
203
+ (0, shared_js_1.finishTable)(table);
204
+ }
205
+ return {
206
+ dialect: "mssql",
207
+ ...((0, shared_js_1.asString)(databaseRow?.db) ? { database: String(databaseRow.db) } : {}),
208
+ schemas,
209
+ tables: [...tables.values()],
210
+ capturedAt: new Date().toISOString(),
211
+ warnings,
212
+ ...(truncated ? { truncated: true } : {}),
213
+ };
214
+ });
215
+ exports.introspectMssql = introspectMssql;
216
+ //# sourceMappingURL=mssql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssql.js","sourceRoot":"","sources":["../../../../src/host/db/introspection/mssql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ // MySQL / MariaDB schema introspection over information_schema (one
3
+ // connection, five queries). A MySQL "schema" is a database; the connection's
4
+ // own database is read unless schemas are named.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.introspectMysql = void 0;
7
+ const mysqlAdapter_js_1 = require("../mysqlAdapter.js");
8
+ const shared_js_1 = require("./shared.js");
9
+ const SYSTEM_SCHEMAS = ["mysql", "information_schema", "performance_schema", "sys"];
10
+ const SCHEMAS_SQL = `
11
+ SELECT SCHEMA_NAME AS sch FROM information_schema.SCHEMATA
12
+ WHERE SCHEMA_NAME NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')
13
+ ORDER BY 1`;
14
+ const TABLES_SQL = `
15
+ SELECT TABLE_SCHEMA AS sch, TABLE_NAME AS tbl, TABLE_TYPE AS kind, TABLE_COMMENT AS comment, TABLE_ROWS AS estimate
16
+ FROM information_schema.TABLES
17
+ WHERE TABLE_SCHEMA IN (?)
18
+ ORDER BY 1, 2`;
19
+ const COLUMNS_SQL = `
20
+ SELECT TABLE_SCHEMA AS sch, TABLE_NAME AS tbl, COLUMN_NAME AS col, ORDINAL_POSITION AS ordinal, COLUMN_TYPE AS data_type,
21
+ IS_NULLABLE AS nullable, COLUMN_DEFAULT AS default_value, EXTRA AS extra, COLUMN_COMMENT AS comment
22
+ FROM information_schema.COLUMNS
23
+ WHERE TABLE_SCHEMA IN (?)
24
+ ORDER BY 1, 2, 4`;
25
+ const CONSTRAINTS_SQL = `
26
+ SELECT tc.CONSTRAINT_NAME AS cname, tc.CONSTRAINT_TYPE AS ctype, tc.TABLE_SCHEMA AS sch, tc.TABLE_NAME AS tbl,
27
+ kcu.COLUMN_NAME AS col, kcu.ORDINAL_POSITION AS pos,
28
+ kcu.REFERENCED_TABLE_SCHEMA AS ref_sch, kcu.REFERENCED_TABLE_NAME AS ref_tbl, kcu.REFERENCED_COLUMN_NAME AS ref_col,
29
+ rc.DELETE_RULE AS on_delete, rc.UPDATE_RULE AS on_update
30
+ FROM information_schema.TABLE_CONSTRAINTS tc
31
+ JOIN information_schema.KEY_COLUMN_USAGE kcu
32
+ ON kcu.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA AND kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME AND kcu.TABLE_NAME = tc.TABLE_NAME
33
+ LEFT JOIN information_schema.REFERENTIAL_CONSTRAINTS rc
34
+ ON rc.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA AND rc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME AND rc.TABLE_NAME = tc.TABLE_NAME
35
+ WHERE tc.TABLE_SCHEMA IN (?) AND tc.CONSTRAINT_TYPE IN ('PRIMARY KEY', 'UNIQUE', 'FOREIGN KEY')
36
+ ORDER BY tc.TABLE_SCHEMA, tc.TABLE_NAME, tc.CONSTRAINT_NAME, kcu.ORDINAL_POSITION`;
37
+ const INDEXES_SQL = `
38
+ SELECT TABLE_SCHEMA AS sch, TABLE_NAME AS tbl, INDEX_NAME AS name, NON_UNIQUE AS non_unique, SEQ_IN_INDEX AS pos, COLUMN_NAME AS col
39
+ FROM information_schema.STATISTICS
40
+ WHERE TABLE_SCHEMA IN (?)
41
+ ORDER BY 1, 2, 3, 5`;
42
+ const introspectMysql = (connection, options) => (0, mysqlAdapter_js_1.withMysqlConnection)(connection, async (conn) => {
43
+ const query = async (sql, params = []) => {
44
+ const [rows] = await conn.query(sql, params);
45
+ return Array.isArray(rows) ? rows : [];
46
+ };
47
+ const warnings = [];
48
+ const schemas = (await query(SCHEMAS_SQL)).map((row) => String(row.sch));
49
+ const own = connection.database?.trim();
50
+ const wanted = options.schemas
51
+ ? options.schemas.filter((name) => schemas.includes(name) && !SYSTEM_SCHEMAS.includes(name))
52
+ : own && schemas.includes(own)
53
+ ? [own]
54
+ : schemas;
55
+ for (const name of options.schemas ?? [])
56
+ if (!schemas.includes(name))
57
+ warnings.push(`Database "${name}" is not visible to this connection.`);
58
+ const tableRows = wanted.length > 0 ? await query(TABLES_SQL, [wanted]) : [];
59
+ const candidates = tableRows.map((row) => ({
60
+ schema: String(row.sch),
61
+ name: String(row.tbl),
62
+ kind: /VIEW/i.test(String(row.kind)) ? "view" : "table",
63
+ comment: (0, shared_js_1.asString)(row.comment),
64
+ estimate: (0, shared_js_1.asNumber)(row.estimate),
65
+ }));
66
+ const { selected, truncated } = (0, shared_js_1.selectTables)(candidates, options);
67
+ const tables = new Map();
68
+ for (const candidate of selected) {
69
+ tables.set((0, shared_js_1.tableKey)(candidate.schema, candidate.name), (0, shared_js_1.emptyTable)(candidate, {
70
+ ...(candidate.comment ? { comment: candidate.comment } : {}),
71
+ ...(candidate.estimate !== undefined && candidate.kind === "table" ? { rowCountEstimate: candidate.estimate } : {}),
72
+ }));
73
+ }
74
+ if (!options.objectsOnly && tables.size > 0) {
75
+ const detailSchemas = [...new Set(selected.map((candidate) => candidate.schema))];
76
+ for (const row of await query(COLUMNS_SQL, [detailSchemas])) {
77
+ const table = tables.get((0, shared_js_1.tableKey)(String(row.sch), String(row.tbl)));
78
+ if (!table)
79
+ continue;
80
+ const defaultValue = (0, shared_js_1.asString)(row.default_value);
81
+ const extra = String(row.extra ?? "").toLowerCase();
82
+ table.columns.push({
83
+ name: String(row.col),
84
+ dataType: String(row.data_type),
85
+ ordinal: (0, shared_js_1.asNumber)(row.ordinal) ?? table.columns.length + 1,
86
+ nullable: /^yes$/i.test(String(row.nullable ?? "")),
87
+ primaryKey: false,
88
+ ...(defaultValue !== undefined ? { defaultValue } : {}),
89
+ ...(extra.includes("auto_increment") ? { autoIncrement: true } : {}),
90
+ ...((0, shared_js_1.asString)(row.comment) ? { comment: (0, shared_js_1.asString)(row.comment) } : {}),
91
+ });
92
+ }
93
+ const groups = new Map();
94
+ for (const row of await query(CONSTRAINTS_SQL, [detailSchemas])) {
95
+ const table = tables.get((0, shared_js_1.tableKey)(String(row.sch), String(row.tbl)));
96
+ if (!table)
97
+ continue;
98
+ const key = `${row.sch}.${row.tbl}.${row.cname}`;
99
+ let group = groups.get(key);
100
+ if (!group) {
101
+ group = {
102
+ type: String(row.ctype),
103
+ table,
104
+ columns: [],
105
+ refColumns: [],
106
+ ...((0, shared_js_1.asString)(row.ref_sch) ? { refSchema: String(row.ref_sch) } : {}),
107
+ ...((0, shared_js_1.asString)(row.ref_tbl) ? { refTable: String(row.ref_tbl) } : {}),
108
+ ...((0, shared_js_1.referentialAction)(row.on_delete) ? { onDelete: (0, shared_js_1.referentialAction)(row.on_delete) } : {}),
109
+ ...((0, shared_js_1.referentialAction)(row.on_update) ? { onUpdate: (0, shared_js_1.referentialAction)(row.on_update) } : {}),
110
+ };
111
+ groups.set(key, group);
112
+ }
113
+ group.columns.push(String(row.col));
114
+ if ((0, shared_js_1.asString)(row.ref_col))
115
+ group.refColumns.push(String(row.ref_col));
116
+ }
117
+ for (const [key, group] of groups) {
118
+ const name = key.split(".").slice(2).join(".");
119
+ if (group.type === "PRIMARY KEY")
120
+ group.table.primaryKey = group.columns;
121
+ else if (group.type === "UNIQUE")
122
+ group.table.indexes.push({ name, columns: group.columns, unique: true });
123
+ else if (group.type === "FOREIGN KEY" && group.refTable) {
124
+ group.table.foreignKeys.push({
125
+ name,
126
+ columns: group.columns,
127
+ ...(group.refSchema ? { refSchema: group.refSchema } : {}),
128
+ refTable: group.refTable,
129
+ refColumns: group.refColumns,
130
+ ...(group.onDelete ? { onDelete: group.onDelete } : {}),
131
+ ...(group.onUpdate ? { onUpdate: group.onUpdate } : {}),
132
+ });
133
+ }
134
+ }
135
+ const indexGroups = new Map();
136
+ for (const row of await query(INDEXES_SQL, [detailSchemas])) {
137
+ const table = tables.get((0, shared_js_1.tableKey)(String(row.sch), String(row.tbl)));
138
+ if (!table)
139
+ continue;
140
+ const key = `${row.sch}.${row.tbl}.${row.name}`;
141
+ let group = indexGroups.get(key);
142
+ if (!group) {
143
+ group = { table, name: String(row.name), unique: !Number(row.non_unique), columns: [] };
144
+ indexGroups.set(key, group);
145
+ }
146
+ group.columns.push(String(row.col));
147
+ }
148
+ for (const group of indexGroups.values()) {
149
+ if (group.table.indexes.some((index) => index.name === group.name))
150
+ continue;
151
+ group.table.indexes.push({ name: group.name, columns: group.columns, unique: group.unique, ...(group.name === "PRIMARY" ? { primary: true } : {}) });
152
+ }
153
+ for (const table of tables.values())
154
+ (0, shared_js_1.finishTable)(table);
155
+ }
156
+ return {
157
+ dialect: "mysql",
158
+ ...(own ? { database: own } : {}),
159
+ schemas,
160
+ tables: [...tables.values()],
161
+ capturedAt: new Date().toISOString(),
162
+ warnings,
163
+ ...(truncated ? { truncated: true } : {}),
164
+ };
165
+ });
166
+ exports.introspectMysql = introspectMysql;
167
+ //# sourceMappingURL=mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../../src/host/db/introspection/mysql.ts"],"names":[],"mappings":"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"}