@dbml/cli 3.6.2 → 3.7.1

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 (292) hide show
  1. package/.babelrc +0 -0
  2. package/LICENSE +0 -0
  3. package/README.md +0 -0
  4. package/__test__/cli.test.js +7 -1
  5. package/__test__/db2dbml/mssql/dbml-error.log +467 -0
  6. package/__test__/db2dbml/mssql/expect-out-files/schema.dbml +190 -0
  7. package/__test__/db2dbml/mssql/options.json +8 -0
  8. package/__test__/db2dbml/mssql/schema.sql +296 -0
  9. package/__test__/db2dbml/mssql/stdout.txt +1 -0
  10. package/__test__/db2dbml/mysql/dbml-error.log +281 -0
  11. package/__test__/db2dbml/mysql/expect-out-files/schema.dbml +180 -0
  12. package/__test__/db2dbml/mysql/options.json +8 -0
  13. package/__test__/db2dbml/mysql/out-files/schema.dbml +180 -0
  14. package/__test__/db2dbml/mysql/schema.sql +141 -0
  15. package/__test__/db2dbml/mysql/stdout.txt +1 -0
  16. package/__test__/db2dbml/postgres/dbml-error.log +252 -0
  17. package/__test__/db2dbml/postgres/expect-out-files/schema.dbml +140 -0
  18. package/__test__/db2dbml/postgres/options.json +8 -0
  19. package/__test__/db2dbml/postgres/out-files/schema.dbml +140 -0
  20. package/__test__/db2dbml/postgres/schema.sql +156 -0
  21. package/__test__/db2dbml/postgres/stdout.txt +1 -0
  22. package/__test__/db2dbml_bin.js +5 -0
  23. package/__test__/dbml2sql/filename --mysql --out-file/dbml-error.log +0 -36
  24. package/__test__/dbml2sql/filename --mysql --out-file/expect-out-files/schema.sql +0 -0
  25. package/__test__/dbml2sql/filename --mysql --out-file/in-files/schema.dbml +0 -0
  26. package/__test__/dbml2sql/filename --mysql --out-file/options.json +0 -0
  27. package/__test__/dbml2sql/filename --mysql --out-file/out-files/schema.sql +1 -1
  28. package/__test__/dbml2sql/filename --mysql --out-file/stdout.txt +0 -0
  29. package/__test__/dbml2sql/filename --mysql stdout/dbml-error.log +0 -0
  30. package/__test__/dbml2sql/filename --mysql stdout/in-files/schema.dbml +0 -0
  31. package/__test__/dbml2sql/filename --mysql stdout/options.json +0 -0
  32. package/__test__/dbml2sql/filename --mysql stdout/stdout.txt +0 -0
  33. package/__test__/dbml2sql/filename --oracle --out-file/dbml-error.log +0 -0
  34. package/__test__/dbml2sql/filename --oracle --out-file/expect-out-files/schema.sql +0 -0
  35. package/__test__/dbml2sql/filename --oracle --out-file/in-files/schema.dbml +0 -0
  36. package/__test__/dbml2sql/filename --oracle --out-file/options.json +0 -0
  37. package/__test__/dbml2sql/filename --oracle --out-file/out-files/schema.sql +1 -1
  38. package/__test__/dbml2sql/filename --oracle --out-file/stdout.txt +0 -0
  39. package/__test__/dbml2sql/filename --oracle stdout/dbml-error.log +0 -0
  40. package/__test__/dbml2sql/filename --oracle stdout/in-files/schema.dbml +0 -0
  41. package/__test__/dbml2sql/filename --oracle stdout/options.json +0 -0
  42. package/__test__/dbml2sql/filename --oracle stdout/stdout.txt +0 -0
  43. package/__test__/dbml2sql/filename --out-file/dbml-error.log +0 -36
  44. package/__test__/dbml2sql/filename --out-file/expect-out-files/schema.sql +0 -0
  45. package/__test__/dbml2sql/filename --out-file/in-files/schema.dbml +0 -0
  46. package/__test__/dbml2sql/filename --out-file/options.json +0 -0
  47. package/__test__/dbml2sql/filename --out-file/out-files/schema.sql +1 -1
  48. package/__test__/dbml2sql/filename --out-file/stdout.txt +0 -0
  49. package/__test__/dbml2sql/filename --postgres --out-file/dbml-error.log +0 -24
  50. package/__test__/dbml2sql/filename --postgres --out-file/expect-out-files/schema.sql +0 -0
  51. package/__test__/dbml2sql/filename --postgres --out-file/in-files/schema.dbml +0 -0
  52. package/__test__/dbml2sql/filename --postgres --out-file/options.json +0 -0
  53. package/__test__/dbml2sql/filename --postgres --out-file/out-files/schema.sql +1 -1
  54. package/__test__/dbml2sql/filename --postgres --out-file/stdout.txt +0 -0
  55. package/__test__/dbml2sql/filename --postgres stdout/dbml-error.log +0 -0
  56. package/__test__/dbml2sql/filename --postgres stdout/in-files/schema.dbml +0 -0
  57. package/__test__/dbml2sql/filename --postgres stdout/options.json +0 -0
  58. package/__test__/dbml2sql/filename --postgres stdout/stdout.txt +0 -0
  59. package/__test__/dbml2sql/filename stdout/dbml-error.log +0 -0
  60. package/__test__/dbml2sql/filename stdout/in-files/schema.dbml +0 -0
  61. package/__test__/dbml2sql/filename stdout/options.json +0 -0
  62. package/__test__/dbml2sql/filename stdout/stdout.txt +0 -0
  63. package/__test__/dbml2sql/filenames --mysql --out-file/dbml-error.log +0 -24
  64. package/__test__/dbml2sql/filenames --mysql --out-file/expect-out-files/schema.sql +0 -0
  65. package/__test__/dbml2sql/filenames --mysql --out-file/in-files/business.dbml +0 -0
  66. package/__test__/dbml2sql/filenames --mysql --out-file/in-files/customer.dbml +0 -0
  67. package/__test__/dbml2sql/filenames --mysql --out-file/in-files/inventory.dbml +0 -0
  68. package/__test__/dbml2sql/filenames --mysql --out-file/options.json +0 -0
  69. package/__test__/dbml2sql/filenames --mysql --out-file/out-files/schema.sql +1 -1
  70. package/__test__/dbml2sql/filenames --mysql --out-file/stdout.txt +0 -0
  71. package/__test__/dbml2sql/filenames --mysql stdout/dbml-error.log +0 -0
  72. package/__test__/dbml2sql/filenames --mysql stdout/in-files/business.dbml +0 -0
  73. package/__test__/dbml2sql/filenames --mysql stdout/in-files/customer.dbml +0 -0
  74. package/__test__/dbml2sql/filenames --mysql stdout/in-files/inventory.dbml +0 -0
  75. package/__test__/dbml2sql/filenames --mysql stdout/options.json +0 -0
  76. package/__test__/dbml2sql/filenames --mysql stdout/stdout.txt +0 -0
  77. package/__test__/dbml2sql/filenames --oracle --out-file/dbml-error.log +0 -0
  78. package/__test__/dbml2sql/filenames --oracle --out-file/expect-out-files/schema.sql +0 -0
  79. package/__test__/dbml2sql/filenames --oracle --out-file/in-files/business.dbml +0 -0
  80. package/__test__/dbml2sql/filenames --oracle --out-file/in-files/customer.dbml +0 -0
  81. package/__test__/dbml2sql/filenames --oracle --out-file/in-files/inventory.dbml +0 -0
  82. package/__test__/dbml2sql/filenames --oracle --out-file/options.json +0 -0
  83. package/__test__/dbml2sql/filenames --oracle --out-file/out-files/schema.sql +1 -1
  84. package/__test__/dbml2sql/filenames --oracle --out-file/stdout.txt +0 -0
  85. package/__test__/dbml2sql/filenames --oracle stdout/dbml-error.log +0 -0
  86. package/__test__/dbml2sql/filenames --oracle stdout/in-files/business.dbml +0 -0
  87. package/__test__/dbml2sql/filenames --oracle stdout/in-files/customer.dbml +0 -0
  88. package/__test__/dbml2sql/filenames --oracle stdout/in-files/inventory.dbml +0 -0
  89. package/__test__/dbml2sql/filenames --oracle stdout/options.json +0 -0
  90. package/__test__/dbml2sql/filenames --oracle stdout/stdout.txt +0 -0
  91. package/__test__/dbml2sql/filenames --out-file/dbml-error.log +0 -24
  92. package/__test__/dbml2sql/filenames --out-file/expect-out-files/schema.sql +0 -0
  93. package/__test__/dbml2sql/filenames --out-file/in-files/business.dbml +0 -0
  94. package/__test__/dbml2sql/filenames --out-file/in-files/customer.dbml +0 -0
  95. package/__test__/dbml2sql/filenames --out-file/in-files/inventory.dbml +0 -0
  96. package/__test__/dbml2sql/filenames --out-file/options.json +0 -0
  97. package/__test__/dbml2sql/filenames --out-file/out-files/schema.sql +1 -1
  98. package/__test__/dbml2sql/filenames --out-file/stdout.txt +0 -0
  99. package/__test__/dbml2sql/filenames --postgres --out-file/dbml-error.log +0 -24
  100. package/__test__/dbml2sql/filenames --postgres --out-file/expect-out-files/schema.sql +0 -0
  101. package/__test__/dbml2sql/filenames --postgres --out-file/in-files/business.dbml +0 -0
  102. package/__test__/dbml2sql/filenames --postgres --out-file/in-files/customer.dbml +0 -0
  103. package/__test__/dbml2sql/filenames --postgres --out-file/in-files/inventory.dbml +0 -0
  104. package/__test__/dbml2sql/filenames --postgres --out-file/options.json +0 -0
  105. package/__test__/dbml2sql/filenames --postgres --out-file/out-files/schema.sql +1 -1
  106. package/__test__/dbml2sql/filenames --postgres --out-file/stdout.txt +0 -0
  107. package/__test__/dbml2sql/filenames --postgres stdout/dbml-error.log +0 -0
  108. package/__test__/dbml2sql/filenames --postgres stdout/in-files/business.dbml +0 -0
  109. package/__test__/dbml2sql/filenames --postgres stdout/in-files/customer.dbml +0 -0
  110. package/__test__/dbml2sql/filenames --postgres stdout/in-files/inventory.dbml +0 -0
  111. package/__test__/dbml2sql/filenames --postgres stdout/options.json +0 -0
  112. package/__test__/dbml2sql/filenames --postgres stdout/stdout.txt +0 -0
  113. package/__test__/dbml2sql/filenames stdout/dbml-error.log +0 -0
  114. package/__test__/dbml2sql/filenames stdout/in-files/business.dbml +0 -0
  115. package/__test__/dbml2sql/filenames stdout/in-files/customer.dbml +0 -0
  116. package/__test__/dbml2sql/filenames stdout/in-files/inventory.dbml +0 -0
  117. package/__test__/dbml2sql/filenames stdout/options.json +0 -0
  118. package/__test__/dbml2sql/filenames stdout/stdout.txt +0 -0
  119. package/__test__/dbml2sql/multiple_schema_mssql/dbml-error.log +0 -24
  120. package/__test__/dbml2sql/multiple_schema_mssql/expect-out-files/multiple_schema.out.sql +0 -0
  121. package/__test__/dbml2sql/multiple_schema_mssql/in-files/multiple_schema.in.dbml +0 -0
  122. package/__test__/dbml2sql/multiple_schema_mssql/options.json +0 -0
  123. package/__test__/dbml2sql/multiple_schema_mssql/out-files/multiple_schema.out.sql +1 -1
  124. package/__test__/dbml2sql/multiple_schema_mssql/stdout.txt +0 -0
  125. package/__test__/dbml2sql/multiple_schema_mysql/dbml-error.log +0 -24
  126. package/__test__/dbml2sql/multiple_schema_mysql/expect-out-files/multiple_schema.out.sql +0 -0
  127. package/__test__/dbml2sql/multiple_schema_mysql/in-files/multiple_schema.in.dbml +0 -0
  128. package/__test__/dbml2sql/multiple_schema_mysql/options.json +0 -0
  129. package/__test__/dbml2sql/multiple_schema_mysql/out-files/multiple_schema.out.sql +1 -1
  130. package/__test__/dbml2sql/multiple_schema_mysql/stdout.txt +0 -0
  131. package/__test__/dbml2sql/multiple_schema_oracle/dbml-error.log +0 -0
  132. package/__test__/dbml2sql/multiple_schema_oracle/expect-out-files/multiple_schema.out.sql +0 -0
  133. package/__test__/dbml2sql/multiple_schema_oracle/in-files/multiple_schema.in.dbml +0 -0
  134. package/__test__/dbml2sql/multiple_schema_oracle/options.json +0 -0
  135. package/__test__/dbml2sql/multiple_schema_oracle/out-files/multiple_schema.out.sql +1 -1
  136. package/__test__/dbml2sql/multiple_schema_oracle/stdout.txt +0 -0
  137. package/__test__/dbml2sql/multiple_schema_pg/dbml-error.log +0 -24
  138. package/__test__/dbml2sql/multiple_schema_pg/expect-out-files/multiple_schema.out.sql +0 -0
  139. package/__test__/dbml2sql/multiple_schema_pg/in-files/multiple_schema.in.dbml +0 -0
  140. package/__test__/dbml2sql/multiple_schema_pg/options.json +0 -0
  141. package/__test__/dbml2sql/multiple_schema_pg/out-files/multiple_schema.out.sql +1 -1
  142. package/__test__/dbml2sql/multiple_schema_pg/stdout.txt +0 -0
  143. package/__test__/dbml2sql/syntax-error/dbml-error.log +7 -2104
  144. package/__test__/dbml2sql/syntax-error/in-files/ecommerce.dbml +0 -0
  145. package/__test__/dbml2sql/syntax-error/options.json +0 -0
  146. package/__test__/dbml2sql/syntax-error/stdout.txt +0 -0
  147. package/__test__/dbml2sql_bin.js +0 -0
  148. package/__test__/sql2dbml/filename --mssql --out-file/dbml-error.log +0 -51
  149. package/__test__/sql2dbml/filename --mssql --out-file/expect-out-files/schema.dbml +0 -0
  150. package/__test__/sql2dbml/filename --mssql --out-file/in-files/schema.sql +0 -0
  151. package/__test__/sql2dbml/filename --mssql --out-file/options.json +0 -0
  152. package/__test__/sql2dbml/filename --mssql --out-file/out-files/schema.dbml +0 -0
  153. package/__test__/sql2dbml/filename --mssql --out-file/stdout.txt +0 -0
  154. package/__test__/sql2dbml/filename --mysql --out-file/dbml-error.log +0 -24
  155. package/__test__/sql2dbml/filename --mysql --out-file/expect-out-files/schema.dbml +0 -0
  156. package/__test__/sql2dbml/filename --mysql --out-file/in-files/schema.sql +0 -0
  157. package/__test__/sql2dbml/filename --mysql --out-file/options.json +0 -0
  158. package/__test__/sql2dbml/filename --mysql --out-file/out-files/schema.dbml +0 -0
  159. package/__test__/sql2dbml/filename --mysql --out-file/stdout.txt +0 -0
  160. package/__test__/sql2dbml/filename --mysql stdout/dbml-error.log +0 -0
  161. package/__test__/sql2dbml/filename --mysql stdout/in-files/schema.sql +0 -0
  162. package/__test__/sql2dbml/filename --mysql stdout/options.json +0 -0
  163. package/__test__/sql2dbml/filename --mysql stdout/stdout.txt +0 -0
  164. package/__test__/sql2dbml/filename --out-file/dbml-error.log +0 -24
  165. package/__test__/sql2dbml/filename --out-file/expect-out-files/schema.dbml +0 -0
  166. package/__test__/sql2dbml/filename --out-file/in-files/schema.sql +0 -0
  167. package/__test__/sql2dbml/filename --out-file/options.json +0 -0
  168. package/__test__/sql2dbml/filename --out-file/out-files/schema.dbml +0 -0
  169. package/__test__/sql2dbml/filename --out-file/stdout.txt +0 -0
  170. package/__test__/sql2dbml/filename --postgres --out-file/dbml-error.log +0 -24
  171. package/__test__/sql2dbml/filename --postgres --out-file/expect-out-files/schema.dbml +0 -0
  172. package/__test__/sql2dbml/filename --postgres --out-file/in-files/schema.sql +0 -0
  173. package/__test__/sql2dbml/filename --postgres --out-file/options.json +0 -0
  174. package/__test__/sql2dbml/filename --postgres --out-file/out-files/schema.dbml +0 -0
  175. package/__test__/sql2dbml/filename --postgres --out-file/stdout.txt +0 -0
  176. package/__test__/sql2dbml/filename --postgres stdout/dbml-error.log +0 -0
  177. package/__test__/sql2dbml/filename --postgres stdout/in-files/schema.sql +0 -0
  178. package/__test__/sql2dbml/filename --postgres stdout/options.json +0 -0
  179. package/__test__/sql2dbml/filename --postgres stdout/stdout.txt +0 -0
  180. package/__test__/sql2dbml/filename --snowflake stdout/dbml-error.log +0 -54
  181. package/__test__/sql2dbml/filename --snowflake stdout/in-files/schema.sql +0 -0
  182. package/__test__/sql2dbml/filename --snowflake stdout/options.json +0 -0
  183. package/__test__/sql2dbml/filename --snowflake stdout/stdout.txt +6 -6
  184. package/__test__/sql2dbml/filename stdout/dbml-error.log +0 -0
  185. package/__test__/sql2dbml/filename stdout/in-files/schema.sql +0 -0
  186. package/__test__/sql2dbml/filename stdout/options.json +0 -0
  187. package/__test__/sql2dbml/filename stdout/stdout.txt +0 -0
  188. package/__test__/sql2dbml/filenames --mysql --out-file/dbml-error.log +0 -24
  189. package/__test__/sql2dbml/filenames --mysql --out-file/expect-out-files/schema.dbml +0 -0
  190. package/__test__/sql2dbml/filenames --mysql --out-file/in-files/business.sql +0 -0
  191. package/__test__/sql2dbml/filenames --mysql --out-file/in-files/customer.sql +0 -0
  192. package/__test__/sql2dbml/filenames --mysql --out-file/in-files/inventory.sql +0 -0
  193. package/__test__/sql2dbml/filenames --mysql --out-file/options.json +0 -0
  194. package/__test__/sql2dbml/filenames --mysql --out-file/out-files/schema.dbml +0 -0
  195. package/__test__/sql2dbml/filenames --mysql --out-file/stdout.txt +0 -0
  196. package/__test__/sql2dbml/filenames --mysql stdout/dbml-error.log +0 -0
  197. package/__test__/sql2dbml/filenames --mysql stdout/in-files/business.sql +0 -0
  198. package/__test__/sql2dbml/filenames --mysql stdout/in-files/customer.sql +0 -0
  199. package/__test__/sql2dbml/filenames --mysql stdout/in-files/inventory.sql +0 -0
  200. package/__test__/sql2dbml/filenames --mysql stdout/options.json +0 -0
  201. package/__test__/sql2dbml/filenames --mysql stdout/stdout.txt +0 -0
  202. package/__test__/sql2dbml/filenames --out-file/dbml-error.log +0 -24
  203. package/__test__/sql2dbml/filenames --out-file/expect-out-files/schema.dbml +0 -0
  204. package/__test__/sql2dbml/filenames --out-file/in-files/business.sql +0 -0
  205. package/__test__/sql2dbml/filenames --out-file/in-files/customer.sql +0 -0
  206. package/__test__/sql2dbml/filenames --out-file/in-files/inventory.sql +0 -0
  207. package/__test__/sql2dbml/filenames --out-file/options.json +0 -0
  208. package/__test__/sql2dbml/filenames --out-file/out-files/schema.dbml +0 -0
  209. package/__test__/sql2dbml/filenames --out-file/stdout.txt +0 -0
  210. package/__test__/sql2dbml/filenames --postgres --out-file/dbml-error.log +0 -24
  211. package/__test__/sql2dbml/filenames --postgres --out-file/expect-out-files/schema.dbml +0 -0
  212. package/__test__/sql2dbml/filenames --postgres --out-file/in-files/business.sql +0 -0
  213. package/__test__/sql2dbml/filenames --postgres --out-file/in-files/customer.sql +0 -0
  214. package/__test__/sql2dbml/filenames --postgres --out-file/in-files/inventory.sql +0 -0
  215. package/__test__/sql2dbml/filenames --postgres --out-file/options.json +0 -0
  216. package/__test__/sql2dbml/filenames --postgres --out-file/out-files/schema.dbml +0 -0
  217. package/__test__/sql2dbml/filenames --postgres --out-file/stdout.txt +0 -0
  218. package/__test__/sql2dbml/filenames --postgres stdout/dbml-error.log +0 -0
  219. package/__test__/sql2dbml/filenames --postgres stdout/in-files/business.sql +0 -0
  220. package/__test__/sql2dbml/filenames --postgres stdout/in-files/customer.sql +0 -0
  221. package/__test__/sql2dbml/filenames --postgres stdout/in-files/inventory.sql +0 -0
  222. package/__test__/sql2dbml/filenames --postgres stdout/options.json +0 -0
  223. package/__test__/sql2dbml/filenames --postgres stdout/stdout.txt +0 -0
  224. package/__test__/sql2dbml/filenames stdout/dbml-error.log +0 -0
  225. package/__test__/sql2dbml/filenames stdout/in-files/business.sql +0 -0
  226. package/__test__/sql2dbml/filenames stdout/in-files/customer.sql +0 -0
  227. package/__test__/sql2dbml/filenames stdout/in-files/inventory.sql +0 -0
  228. package/__test__/sql2dbml/filenames stdout/options.json +0 -0
  229. package/__test__/sql2dbml/filenames stdout/stdout.txt +0 -0
  230. package/__test__/sql2dbml/multiple_schema_mssql/dbml-error.log +0 -121
  231. package/__test__/sql2dbml/multiple_schema_mssql/expect-out-files/multiple_schema.out.dbml +0 -0
  232. package/__test__/sql2dbml/multiple_schema_mssql/in-files/multiple_schema.in.sql +0 -0
  233. package/__test__/sql2dbml/multiple_schema_mssql/options.json +0 -0
  234. package/__test__/sql2dbml/multiple_schema_mssql/out-files/multiple_schema.out.dbml +0 -0
  235. package/__test__/sql2dbml/multiple_schema_mssql/stdout.txt +0 -0
  236. package/__test__/sql2dbml/multiple_schema_mysql/dbml-error.log +0 -104
  237. package/__test__/sql2dbml/multiple_schema_mysql/expect-out-files/multiple_schema.out.dbml +0 -0
  238. package/__test__/sql2dbml/multiple_schema_mysql/in-files/multiple_schema.in.sql +0 -0
  239. package/__test__/sql2dbml/multiple_schema_mysql/options.json +0 -0
  240. package/__test__/sql2dbml/multiple_schema_mysql/out-files/multiple_schema.out.dbml +0 -0
  241. package/__test__/sql2dbml/multiple_schema_mysql/stdout.txt +0 -0
  242. package/__test__/sql2dbml/multiple_schema_pg/dbml-error.log +0 -131
  243. package/__test__/sql2dbml/multiple_schema_pg/expect-out-files/multiple_schema.out.dbml +0 -0
  244. package/__test__/sql2dbml/multiple_schema_pg/in-files/multiple_schema.in.sql +0 -0
  245. package/__test__/sql2dbml/multiple_schema_pg/options.json +0 -0
  246. package/__test__/sql2dbml/multiple_schema_pg/out-files/multiple_schema.out.dbml +0 -0
  247. package/__test__/sql2dbml/multiple_schema_pg/stdout.txt +0 -0
  248. package/__test__/sql2dbml/syntax-error/dbml-error.log +7 -2077
  249. package/__test__/sql2dbml/syntax-error/in-files/business.sql +0 -0
  250. package/__test__/sql2dbml/syntax-error/options.json +0 -0
  251. package/__test__/sql2dbml/syntax-error/stdout.txt +0 -0
  252. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mssql/dbml-error.log +9 -27
  253. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mssql/in-files/schema.sql +0 -0
  254. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mssql/options.json +0 -0
  255. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mssql/stdout.txt +0 -0
  256. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mysql/dbml-error.log +7 -28
  257. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mysql/in-files/schema.sql +0 -0
  258. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mysql/options.json +0 -0
  259. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mysql/stdout.txt +0 -0
  260. package/__test__/sql2dbml_bin.js +0 -0
  261. package/bin/db2dbml.js +4 -0
  262. package/dbml-error.log +52 -279
  263. package/jestHelpers.js +0 -0
  264. package/lib/cli/config.js +0 -0
  265. package/lib/cli/connector.js +6 -7
  266. package/lib/cli/export.js +0 -0
  267. package/lib/cli/import.js +0 -0
  268. package/lib/cli/index.js +28 -0
  269. package/lib/cli/outputPlugins/outputConsolePlugin.js +0 -0
  270. package/lib/cli/outputPlugins/outputFilePlugin.js +0 -0
  271. package/lib/cli/utils.js +20 -0
  272. package/lib/cli/validatePlugins/validatePlugins.js +0 -0
  273. package/lib/errors/domainError.js +0 -0
  274. package/lib/errors/index.js +0 -0
  275. package/lib/errors/syntaxError.js +0 -0
  276. package/lib/helpers/logger.js +0 -0
  277. package/lib/index.js +6 -0
  278. package/package.json +8 -4
  279. package/src/cli/config.js +0 -0
  280. package/src/cli/connector.js +31 -0
  281. package/src/cli/export.js +0 -0
  282. package/src/cli/import.js +0 -0
  283. package/src/cli/index.js +35 -0
  284. package/src/cli/outputPlugins/outputConsolePlugin.js +0 -0
  285. package/src/cli/outputPlugins/outputFilePlugin.js +0 -0
  286. package/src/cli/utils.js +23 -0
  287. package/src/cli/validatePlugins/validatePlugins.js +0 -0
  288. package/src/errors/domainError.js +0 -0
  289. package/src/errors/index.js +0 -0
  290. package/src/errors/syntaxError.js +0 -0
  291. package/src/helpers/logger.js +0 -0
  292. package/src/index.js +2 -1
@@ -0,0 +1,190 @@
1
+ Enum "dbo"."chk_status" {
2
+ "cancelled"
3
+ "delivered"
4
+ "shipped"
5
+ "processing"
6
+ "pending"
7
+ }
8
+
9
+ Enum "dbo"."chk_gender" {
10
+ "Other"
11
+ "Female"
12
+ "Male"
13
+ }
14
+
15
+ Table "dbo"."Authors" {
16
+ "AuthorID" int [pk, not null]
17
+ "AuthorName" nvarchar [unique]
18
+ "BirthYear" int [unique]
19
+ "NationalityID" int [pk, not null]
20
+ }
21
+
22
+ Table "dbo"."Books" {
23
+ "AuthorID" int [pk, not null]
24
+ "BookID" int [pk, not null]
25
+ "ISBN" nvarchar [unique]
26
+ "NationalityID" int
27
+ "Title" nvarchar
28
+ }
29
+
30
+ Table "dbo"."DatetimeTypes" {
31
+ "DATECol" date [default: `getdate()`]
32
+ "DATETIME2Col" datetime2 [default: `sysdatetime()`]
33
+ "DATETIMECol" datetime [default: `getdate()`]
34
+ "DATETIMEOFFSETCol" datetimeoffset [default: `sysdatetimeoffset()`]
35
+ "ID" int [pk, not null, increment]
36
+ "ROWVERSIONCol" timestamp [not null]
37
+ "SMALLDATETIMECol" smalldatetime [default: `getdate()`]
38
+ "TIMECol" time [default: `CONVERT([time],getdate())`]
39
+ }
40
+
41
+ Table "dbo"."gender_reference" {
42
+ "value" nvarchar [pk, not null]
43
+ }
44
+
45
+ Table "dbo"."NumberTypes" {
46
+ "BIGINTCol" bigint [default: 0]
47
+ "BITCol" bit [default: 0]
48
+ "DECIMALCol" decimal(10,2) [default: 0.00]
49
+ "FLOATCol" float [default: 0.0]
50
+ "ID" int [pk, not null, increment]
51
+ "INTCol" int [default: 0]
52
+ "NUMERICCol" numeric(10,2) [default: 0.00]
53
+ "REALCol" real [default: 0.0]
54
+ "SMALLINTCol" smallint [default: 0]
55
+ "TINYINTCol" tinyint [default: 0]
56
+ }
57
+
58
+ Table "dbo"."ObjectTypes" {
59
+ "BinaryField" binary [default: `0x00`]
60
+ "Id" int [pk, not null, increment]
61
+ "ImageField" image [default: `0x00`]
62
+ "JsonField" nvarchar [default: `N'{"defaultKey": "defaultValue", "status": "active", "count": 0}'`]
63
+ "VarBinaryField" varbinary [default: `0x00`]
64
+ "VarBinaryMaxField" varbinary [default: `0x00`]
65
+ "XmlField" xml [default: '''<Books>
66
+ <Book>
67
+ <Title>The Great Gatsby</Title>
68
+ <Author>F. Scott Fitzgerald</Author>
69
+ <Year>1925</Year>
70
+ <Price>10.99</Price>
71
+ <Publisher>Scribner</Publisher>
72
+ <Location>New York</Location>
73
+ <Genre>Fiction</Genre>
74
+ <Subgenre>Classic</Subgenre>
75
+ </Book>
76
+ <Book>
77
+ <Title>1984</Title>
78
+ <Author>George Orwell</Author>
79
+ <Year>1949</Year>
80
+ <Price>8.99</Price>
81
+ <Publisher>Secker & Warburg</Publisher>
82
+ <Location>London</Location>
83
+ <Genre>Dystopian</Genre>
84
+ <Subgenre>Political Fiction</Subgenre>
85
+ </Book>
86
+ </Books>''']
87
+ }
88
+
89
+ Table "dbo"."order_items" {
90
+ "order_id" int [unique, not null]
91
+ "order_item_id" int [pk, not null, increment]
92
+ "product_id" int [unique, not null]
93
+ "quantity" int [not null]
94
+ "unit_price" decimal [not null]
95
+
96
+ Indexes {
97
+ (order_id, product_id) [type: nonclustered, name: "idx_order_items_order_product"]
98
+ }
99
+ }
100
+
101
+ Table "dbo"."orders" {
102
+ "billing_address" text [not null]
103
+ "order_date" datetime2 [default: `getdate()`]
104
+ "order_id" int [pk, not null, increment]
105
+ "shipping_address" text [not null]
106
+ "status" dbo.chk_status [default: 'pending']
107
+ "total_amount" decimal [not null]
108
+ "user_id" int [not null]
109
+
110
+ Indexes {
111
+ (user_id, order_date) [type: nonclustered, name: "idx_orders_user_date"]
112
+ }
113
+ }
114
+
115
+ Table "dbo"."products" {
116
+ "category" varchar
117
+ "created_at" datetime2 [default: `getdate()`]
118
+ "description" text
119
+ "is_available" bit [default: 1]
120
+ "name" varchar [not null]
121
+ "price" decimal [not null]
122
+ "product_id" int [pk, not null, increment]
123
+ "stock_quantity" int [not null, default: 0]
124
+ "updated_at" datetime2 [default: `getdate()`]
125
+
126
+ Indexes {
127
+ category [type: nonclustered, name: "idx_products_category"]
128
+ }
129
+ }
130
+
131
+ Table "dbo"."StringTypes" {
132
+ "CharField" char(10) [default: 'N/A']
133
+ "Id" int [pk, not null, increment]
134
+ "NCharField" nchar [default: `N'N/A'`]
135
+ "NTextField" ntext [default: `N'N/A'`]
136
+ "NVarCharField" nvarchar [default: `N'N/A'`]
137
+ "NVarCharMaxField" nvarchar [default: `N'N/A'`]
138
+ "TextField" text(16) [default: 'N/A']
139
+ "VarcharField" varchar(50) [default: '{"default_key": "default_value"}']
140
+ "VarcharMaxField" varchar [default: 'N/A']
141
+ }
142
+
143
+ Table "dbo"."table_with_comments" {
144
+ "created_at" datetime2 [default: `getdate()`, note: 'Timestamp when the item was created.']
145
+ "description" text [note: 'Detailed description of the item.']
146
+ "id" int [pk, not null, increment, note: 'Unique identifier for each item.']
147
+ "name" varchar [note: 'Name of the item.']
148
+ Note: 'This table stores information about various items.'
149
+ }
150
+
151
+ Table "dbo"."user_define_data_types" {
152
+ "age_end" int
153
+ "age_start" int
154
+ "gender" dbo.chk_gender
155
+ "height" float
156
+ "id" int [pk, not null, increment]
157
+ "name" nvarchar
158
+ "weight" float
159
+ }
160
+
161
+ Table "dbo"."users" {
162
+ "created_at" datetime2 [default: `getdate()`]
163
+ "date_of_birth" date
164
+ "email" varchar [unique, not null]
165
+ "first_name" varchar
166
+ "full_name" varchar
167
+ "full_name_lower" varchar
168
+ "is_active" bit [default: 1]
169
+ "last_login" datetime2
170
+ "last_name" varchar
171
+ "password_hash" varchar [not null]
172
+ "user_id" int [pk, not null, increment]
173
+ "username" varchar [unique, not null]
174
+
175
+ Indexes {
176
+ email [type: nonclustered, name: "idx_users_email"]
177
+ full_name [type: nonclustered, name: "idx_users_full_name"]
178
+ (is_active, full_name_lower) [type: nonclustered, name: "idx_users_is_active_full_name"]
179
+ }
180
+ }
181
+
182
+ Ref "FK_AuthorNationality":"dbo"."Authors".("AuthorID", "NationalityID") < "dbo"."Books".("AuthorID", "NationalityID")
183
+
184
+ Ref "fk_product":"dbo"."products"."product_id" < "dbo"."order_items"."product_id" [update: cascade]
185
+
186
+ Ref "fk_order":"dbo"."orders"."order_id" < "dbo"."order_items"."order_id" [update: cascade, delete: cascade]
187
+
188
+ Ref "fk_user":"dbo"."users"."user_id" < "dbo"."orders"."user_id" [update: cascade, delete: cascade]
189
+
190
+ Ref "fk_gender":"dbo"."gender_reference"."value" < "dbo"."user_define_data_types"."gender"
@@ -0,0 +1,8 @@
1
+ {
2
+ "args": [
3
+ "mssql",
4
+ "'Server=localhost,1433;Database=dbml_test;User Id=SA;Password=dbml.123.123;Encrypt=true;TrustServerCertificate=true;'",
5
+ "-o",
6
+ "./out-files/schema.dbml"
7
+ ]
8
+ }
@@ -0,0 +1,296 @@
1
+ SET QUOTED_IDENTIFIER ON;
2
+ GO
3
+
4
+ CREATE DATABASE dbml_test;
5
+ GO
6
+
7
+ USE dbml_test;
8
+ GO
9
+
10
+ -- Create users table
11
+ CREATE TABLE users (
12
+ user_id INT IDENTITY(1,1) PRIMARY KEY,
13
+ username VARCHAR(50) UNIQUE NOT NULL,
14
+ email VARCHAR(100) UNIQUE NOT NULL,
15
+ password_hash VARCHAR(255) NOT NULL,
16
+ first_name VARCHAR(50),
17
+ last_name VARCHAR(50),
18
+ full_name VARCHAR(100),
19
+ full_name_lower AS LOWER(full_name) PERSISTED, -- Computed column with PERSISTED option
20
+ date_of_birth DATE,
21
+ created_at DATETIME2 DEFAULT CURRENT_TIMESTAMP,
22
+ last_login DATETIME2,
23
+ is_active BIT DEFAULT 1,
24
+ CONSTRAINT chk_email_format CHECK (email LIKE '%_@_%._%'),
25
+ CONSTRAINT chk_age CHECK (date_of_birth <= DATEADD(YEAR, -13, GETDATE()))
26
+ );
27
+ GO
28
+
29
+ -- Create an index on the email column for faster lookups
30
+ CREATE INDEX idx_users_email ON users (email);
31
+ GO
32
+
33
+ CREATE UNIQUE INDEX idx_users_user_id ON users (user_id);
34
+ GO
35
+
36
+ CREATE INDEX idx_users_full_name ON users (full_name);
37
+ GO
38
+
39
+ CREATE INDEX idx_users_is_active_full_name ON users (is_active, full_name_lower);
40
+ GO
41
+
42
+ -- Create products table
43
+ CREATE TABLE products (
44
+ product_id INT IDENTITY(1,1) PRIMARY KEY,
45
+ name VARCHAR(100) NOT NULL,
46
+ description TEXT,
47
+ price DECIMAL(10, 2) NOT NULL,
48
+ stock_quantity INT NOT NULL DEFAULT 0,
49
+ category VARCHAR(50),
50
+ created_at DATETIME2 DEFAULT CURRENT_TIMESTAMP,
51
+ updated_at DATETIME2 DEFAULT CURRENT_TIMESTAMP,
52
+ is_available BIT DEFAULT 1,
53
+ CONSTRAINT chk_price_positive CHECK (price > 0),
54
+ CONSTRAINT chk_stock_non_negative CHECK (stock_quantity >= 0)
55
+ );
56
+ GO
57
+
58
+ -- Create an index on the category column for faster filtering
59
+ CREATE INDEX idx_products_category ON products (category);
60
+ GO
61
+
62
+ -- Create orders table
63
+ CREATE TABLE orders (
64
+ order_id INT IDENTITY(1,1) PRIMARY KEY,
65
+ user_id INT NOT NULL,
66
+ order_date DATETIME2 DEFAULT CURRENT_TIMESTAMP,
67
+ total_amount DECIMAL(12, 2) NOT NULL,
68
+ status VARCHAR(20) DEFAULT 'pending',
69
+ shipping_address TEXT NOT NULL,
70
+ billing_address TEXT NOT NULL,
71
+ CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(user_id)
72
+ ON DELETE CASCADE -- Delete orders if the user is deleted
73
+ ON UPDATE CASCADE, -- Update user_id in orders if user_id in users is updated
74
+ CONSTRAINT chk_total_amount_positive CHECK (total_amount > 0),
75
+ CONSTRAINT chk_status CHECK (status IN ('pending', 'processing', 'shipped', 'delivered', 'cancelled'))
76
+ );
77
+ GO
78
+
79
+ -- Create an index on the user_id and order_date columns for faster querying
80
+ CREATE INDEX idx_orders_user_date ON orders (user_id, order_date);
81
+ GO
82
+
83
+ -- Create order_items table
84
+ CREATE TABLE order_items (
85
+ order_item_id INT IDENTITY(1,1) PRIMARY KEY,
86
+ order_id INT NOT NULL,
87
+ product_id INT NOT NULL,
88
+ quantity INT NOT NULL,
89
+ unit_price DECIMAL(10, 2) NOT NULL,
90
+ CONSTRAINT fk_order FOREIGN KEY (order_id) REFERENCES orders(order_id)
91
+ ON DELETE CASCADE -- Delete order items if the order is deleted
92
+ ON UPDATE CASCADE, -- Update order_id in order_items if order_id in orders is updated
93
+ CONSTRAINT fk_product FOREIGN KEY (product_id) REFERENCES products(product_id)
94
+ ON DELETE NO ACTION -- Default behavior: Prevent deletion of products that are referenced in order items
95
+ ON UPDATE CASCADE, -- Update product_id in order_items if product_id in products is updated
96
+ CONSTRAINT chk_quantity_positive CHECK (quantity > 0),
97
+ CONSTRAINT chk_unit_price_positive CHECK (unit_price > 0),
98
+ CONSTRAINT uq_order_product UNIQUE (order_id, product_id)
99
+ );
100
+ GO
101
+
102
+ -- Create a composite index on order_id and product_id for faster joins
103
+ CREATE INDEX idx_order_items_order_product ON order_items (order_id, product_id);
104
+ GO
105
+
106
+ -- Create a table with default values for string types
107
+ CREATE TABLE StringTypes (
108
+ Id INT PRIMARY KEY IDENTITY(1,1), -- Auto-incrementing primary key
109
+ CharField CHAR(10) DEFAULT 'N/A', -- Fixed-length non-Unicode string
110
+ VarcharField VARCHAR(50) DEFAULT '{"default_key": "default_value"}', -- Variable-length non-Unicode string
111
+ VarcharMaxField VARCHAR(MAX) DEFAULT 'N/A', -- Variable-length non-Unicode string with max size
112
+ TextField TEXT DEFAULT 'N/A', -- Variable-length non-Unicode string (deprecated)
113
+ NCharField NCHAR(10) DEFAULT N'N/A', -- Fixed-length Unicode string
114
+ NVarCharField NVARCHAR(50) DEFAULT N'N/A', -- Variable-length Unicode string
115
+ NVarCharMaxField NVARCHAR(MAX) DEFAULT N'N/A', -- Variable-length Unicode string with max size
116
+ NTextField NTEXT DEFAULT N'N/A' -- Variable-length Unicode string (deprecated)
117
+ );
118
+ GO
119
+
120
+ -- Create a table with default value for number type and boolean type
121
+ CREATE TABLE NumberTypes (
122
+ ID INT IDENTITY(1,1) PRIMARY KEY,
123
+ TINYINTCol TINYINT DEFAULT 0,
124
+ SMALLINTCol SMALLINT DEFAULT 0,
125
+ INTCol INT DEFAULT 0,
126
+ BIGINTCol BIGINT DEFAULT 0,
127
+ DECIMALCol DECIMAL(10, 2) DEFAULT 0.00,
128
+ NUMERICCol NUMERIC(10, 2) DEFAULT 0.00,
129
+ FLOATCol FLOAT DEFAULT 0.0,
130
+ REALCol REAL DEFAULT 0.0,
131
+ BITCol BIT DEFAULT 0 -- Using BIT for boolean
132
+ );
133
+ GO
134
+
135
+ -- Create a table with default values for date and time types
136
+ CREATE TABLE DatetimeTypes (
137
+ ID INT IDENTITY(1,1) PRIMARY KEY,
138
+ DATECol DATE DEFAULT GETDATE(),
139
+ TIMECol TIME DEFAULT CAST(GETDATE() AS TIME),
140
+ DATETIMECol DATETIME DEFAULT GETDATE(),
141
+ DATETIME2Col DATETIME2 DEFAULT SYSDATETIME(),
142
+ SMALLDATETIMECol SMALLDATETIME DEFAULT GETDATE(),
143
+ ROWVERSIONCol ROWVERSION, -- Automatically generated unique value
144
+ DATETIMEOFFSETCol DATETIMEOFFSET DEFAULT SYSDATETIMEOFFSET()
145
+ );
146
+ GO
147
+
148
+ -- Create a table with default values for other data types
149
+ CREATE TABLE ObjectTypes (
150
+ Id INT PRIMARY KEY IDENTITY(1,1), -- Auto-incrementing primary key
151
+ XmlField XML DEFAULT '<Books>
152
+ <Book>
153
+ <Title>The Great Gatsby</Title>
154
+ <Author>F. Scott Fitzgerald</Author>
155
+ <Year>1925</Year>
156
+ <Price>10.99</Price>
157
+ <Publisher>Scribner</Publisher>
158
+ <Location>New York</Location>
159
+ <Genre>Fiction</Genre>
160
+ <Subgenre>Classic</Subgenre>
161
+ </Book>
162
+ <Book>
163
+ <Title>1984</Title>
164
+ <Author>George Orwell</Author>
165
+ <Year>1949</Year>
166
+ <Price>8.99</Price>
167
+ <Publisher>Secker & Warburg</Publisher>
168
+ <Location>London</Location>
169
+ <Genre>Dystopian</Genre>
170
+ <Subgenre>Political Fiction</Subgenre>
171
+ </Book>
172
+ </Books>', -- Complex XML structure
173
+ JsonField NVARCHAR(MAX) DEFAULT N'{"defaultKey": "defaultValue", "status": "active", "count": 0}',
174
+ BinaryField BINARY(50) DEFAULT 0x00, -- Fixed-length binary data with a default value of zero
175
+ VarBinaryField VARBINARY(50) DEFAULT 0x00, -- Variable-length binary data with a default value of zero
176
+ VarBinaryMaxField VARBINARY(MAX) DEFAULT 0x00, -- Variable-length binary data with a default value of zero
177
+ ImageField IMAGE DEFAULT 0x00 -- Variable-length binary data (deprecated) with a default value of zero
178
+ );
179
+ GO
180
+
181
+ -- Create a reference table for gender
182
+ CREATE TABLE gender_reference (
183
+ value NVARCHAR(10) PRIMARY KEY
184
+ );
185
+ GO
186
+
187
+ -- Populate the gender_reference table with the values 'Male', 'Female', and 'Other'
188
+ INSERT INTO gender_reference (value) VALUES ('Male'), ('Female'), ('Other');
189
+ GO
190
+
191
+ -- Create the table user_define_data_types with the necessary data types and constraints
192
+ CREATE TABLE user_define_data_types (
193
+ id INT IDENTITY(1,1) PRIMARY KEY, -- Using IDENTITY for auto-incrementing column
194
+ name NVARCHAR(50),
195
+ gender NVARCHAR(10),
196
+ age_start INT, -- Start of age range
197
+ age_end INT, -- End of age range
198
+ height FLOAT,
199
+ weight FLOAT,
200
+ CONSTRAINT chk_gender CHECK (gender IN ('Male', 'Female', 'Other')), -- Using CHECK constraint for ENUM-like behavior
201
+ CONSTRAINT chk_age_range CHECK (age_start <= age_end) -- Ensure that the start of the range is less than or equal to the end
202
+ );
203
+ GO
204
+
205
+ -- Add foreign key constraint to ensure gender values are valid
206
+ ALTER TABLE user_define_data_types
207
+ ADD CONSTRAINT fk_gender FOREIGN KEY (gender) REFERENCES gender_reference(value);
208
+ GO
209
+
210
+ -- Create table with comments
211
+ CREATE TABLE table_with_comments (
212
+ id INT IDENTITY(1,1) PRIMARY KEY,
213
+ name VARCHAR(100),
214
+ description TEXT,
215
+ created_at DATETIME2 DEFAULT CURRENT_TIMESTAMP
216
+ );
217
+ GO
218
+
219
+ -- Add comments
220
+ EXEC sys.sp_addextendedproperty
221
+ @name=N'MS_Description',
222
+ @value=N'This table stores information about various items.',
223
+ @level0type=N'SCHEMA',
224
+ @level0name=N'dbo',
225
+ @level1type=N'TABLE',
226
+ @level1name=N'table_with_comments';
227
+ GO
228
+
229
+ -- Add comments to the columns of table_with_comments
230
+ EXEC sys.sp_addextendedproperty
231
+ @name=N'MS_Description',
232
+ @value=N'Unique identifier for each item.',
233
+ @level0type=N'SCHEMA',
234
+ @level0name=N'dbo',
235
+ @level1type=N'TABLE',
236
+ @level1name=N'table_with_comments',
237
+ @level2type=N'COLUMN',
238
+ @level2name=N'id';
239
+ GO
240
+
241
+ EXEC sys.sp_addextendedproperty
242
+ @name=N'MS_Description',
243
+ @value=N'Name of the item.',
244
+ @level0type=N'SCHEMA',
245
+ @level0name=N'dbo',
246
+ @level1type=N'TABLE',
247
+ @level1name=N'table_with_comments',
248
+ @level2type=N'COLUMN',
249
+ @level2name=N'name';
250
+ GO
251
+
252
+ EXEC sys.sp_addextendedproperty
253
+ @name=N'MS_Description',
254
+ @value=N'Detailed description of the item.',
255
+ @level0type=N'SCHEMA',
256
+ @level0name=N'dbo',
257
+ @level1type=N'TABLE',
258
+ @level1name=N'table_with_comments',
259
+ @level2type=N'COLUMN',
260
+ @level2name=N'description';
261
+ GO
262
+
263
+ EXEC sys.sp_addextendedproperty
264
+ @name=N'MS_Description',
265
+ @value=N'Timestamp when the item was created.',
266
+ @level0type=N'SCHEMA',
267
+ @level0name=N'dbo',
268
+ @level1type=N'TABLE',
269
+ @level1name=N'table_with_comments',
270
+ @level2type=N'COLUMN',
271
+ @level2name=N'created_at';
272
+ GO
273
+
274
+ -- Add composite primary key, composite unique constraint, and composite foreign key constraint
275
+ CREATE TABLE Authors (
276
+ AuthorID INT,
277
+ NationalityID INT,
278
+ AuthorName NVARCHAR(100),
279
+ BirthYear INT,
280
+ PRIMARY KEY (AuthorID, NationalityID),
281
+ UNIQUE (AuthorName, BirthYear)
282
+ );
283
+ GO
284
+
285
+ CREATE TABLE Books (
286
+ BookID INT,
287
+ AuthorID INT,
288
+ NationalityID INT,
289
+ ISBN NVARCHAR(20),
290
+ Title NVARCHAR(200),
291
+ PRIMARY KEY (BookID, AuthorID),
292
+ UNIQUE (ISBN),
293
+ CONSTRAINT FK_AuthorNationality FOREIGN KEY (AuthorID, NationalityID)
294
+ REFERENCES Authors (AuthorID, NationalityID)
295
+ );
296
+ GO
@@ -0,0 +1 @@
1
+ ✔ Generated DBML file from database's connection: schema.dbml