common.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { ColumnBuilder } from "../../column-builder.js";
  2. import { Column } from "../../column.js";
  3. import { entityKind } from "../../entity.js";
  4. import { ForeignKeyBuilder } from "../foreign-keys.js";
  5. import { uniqueKeyName } from "../unique-constraint.js";
  6. class MySqlColumnBuilder extends ColumnBuilder {
  7. static [entityKind] = "MySqlColumnBuilder";
  8. foreignKeyConfigs = [];
  9. references(ref, actions = {}) {
  10. this.foreignKeyConfigs.push({ ref, actions });
  11. return this;
  12. }
  13. unique(name) {
  14. this.config.isUnique = true;
  15. this.config.uniqueName = name;
  16. return this;
  17. }
  18. generatedAlwaysAs(as, config) {
  19. this.config.generated = {
  20. as,
  21. type: "always",
  22. mode: config?.mode ?? "virtual"
  23. };
  24. return this;
  25. }
  26. /** @internal */
  27. buildForeignKeys(column, table) {
  28. return this.foreignKeyConfigs.map(({ ref, actions }) => {
  29. return ((ref2, actions2) => {
  30. const builder = new ForeignKeyBuilder(() => {
  31. const foreignColumn = ref2();
  32. return { columns: [column], foreignColumns: [foreignColumn] };
  33. });
  34. if (actions2.onUpdate) {
  35. builder.onUpdate(actions2.onUpdate);
  36. }
  37. if (actions2.onDelete) {
  38. builder.onDelete(actions2.onDelete);
  39. }
  40. return builder.build(table);
  41. })(ref, actions);
  42. });
  43. }
  44. }
  45. class MySqlColumn extends Column {
  46. constructor(table, config) {
  47. if (!config.uniqueName) {
  48. config.uniqueName = uniqueKeyName(table, [config.name]);
  49. }
  50. super(table, config);
  51. this.table = table;
  52. }
  53. static [entityKind] = "MySqlColumn";
  54. }
  55. class MySqlColumnBuilderWithAutoIncrement extends MySqlColumnBuilder {
  56. static [entityKind] = "MySqlColumnBuilderWithAutoIncrement";
  57. constructor(name, dataType, columnType) {
  58. super(name, dataType, columnType);
  59. this.config.autoIncrement = false;
  60. }
  61. autoincrement() {
  62. this.config.autoIncrement = true;
  63. this.config.hasDefault = true;
  64. return this;
  65. }
  66. }
  67. class MySqlColumnWithAutoIncrement extends MySqlColumn {
  68. static [entityKind] = "MySqlColumnWithAutoIncrement";
  69. autoIncrement = this.config.autoIncrement;
  70. }
  71. export {
  72. MySqlColumn,
  73. MySqlColumnBuilder,
  74. MySqlColumnBuilderWithAutoIncrement,
  75. MySqlColumnWithAutoIncrement
  76. };
  77. //# sourceMappingURL=common.js.map