integer.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import { entityKind } from "../../entity.js";
  2. import { sql } from "../../sql/sql.js";
  3. import { getColumnNameAndConfig } from "../../utils.js";
  4. import { SQLiteColumn, SQLiteColumnBuilder } from "./common.js";
  5. class SQLiteBaseIntegerBuilder extends SQLiteColumnBuilder {
  6. static [entityKind] = "SQLiteBaseIntegerBuilder";
  7. constructor(name, dataType, columnType) {
  8. super(name, dataType, columnType);
  9. this.config.autoIncrement = false;
  10. }
  11. primaryKey(config) {
  12. if (config?.autoIncrement) {
  13. this.config.autoIncrement = true;
  14. }
  15. this.config.hasDefault = true;
  16. return super.primaryKey();
  17. }
  18. }
  19. class SQLiteBaseInteger extends SQLiteColumn {
  20. static [entityKind] = "SQLiteBaseInteger";
  21. autoIncrement = this.config.autoIncrement;
  22. getSQLType() {
  23. return "integer";
  24. }
  25. }
  26. class SQLiteIntegerBuilder extends SQLiteBaseIntegerBuilder {
  27. static [entityKind] = "SQLiteIntegerBuilder";
  28. constructor(name) {
  29. super(name, "number", "SQLiteInteger");
  30. }
  31. build(table) {
  32. return new SQLiteInteger(
  33. table,
  34. this.config
  35. );
  36. }
  37. }
  38. class SQLiteInteger extends SQLiteBaseInteger {
  39. static [entityKind] = "SQLiteInteger";
  40. }
  41. class SQLiteTimestampBuilder extends SQLiteBaseIntegerBuilder {
  42. static [entityKind] = "SQLiteTimestampBuilder";
  43. constructor(name, mode) {
  44. super(name, "date", "SQLiteTimestamp");
  45. this.config.mode = mode;
  46. }
  47. /**
  48. * @deprecated Use `default()` with your own expression instead.
  49. *
  50. * Adds `DEFAULT (cast((julianday('now') - 2440587.5)*86400000 as integer))` to the column, which is the current epoch timestamp in milliseconds.
  51. */
  52. defaultNow() {
  53. return this.default(sql`(cast((julianday('now') - 2440587.5)*86400000 as integer))`);
  54. }
  55. build(table) {
  56. return new SQLiteTimestamp(
  57. table,
  58. this.config
  59. );
  60. }
  61. }
  62. class SQLiteTimestamp extends SQLiteBaseInteger {
  63. static [entityKind] = "SQLiteTimestamp";
  64. mode = this.config.mode;
  65. mapFromDriverValue(value) {
  66. if (this.config.mode === "timestamp") {
  67. return new Date(value * 1e3);
  68. }
  69. return new Date(value);
  70. }
  71. mapToDriverValue(value) {
  72. const unix = value.getTime();
  73. if (this.config.mode === "timestamp") {
  74. return Math.floor(unix / 1e3);
  75. }
  76. return unix;
  77. }
  78. }
  79. class SQLiteBooleanBuilder extends SQLiteBaseIntegerBuilder {
  80. static [entityKind] = "SQLiteBooleanBuilder";
  81. constructor(name, mode) {
  82. super(name, "boolean", "SQLiteBoolean");
  83. this.config.mode = mode;
  84. }
  85. build(table) {
  86. return new SQLiteBoolean(
  87. table,
  88. this.config
  89. );
  90. }
  91. }
  92. class SQLiteBoolean extends SQLiteBaseInteger {
  93. static [entityKind] = "SQLiteBoolean";
  94. mode = this.config.mode;
  95. mapFromDriverValue(value) {
  96. return Number(value) === 1;
  97. }
  98. mapToDriverValue(value) {
  99. return value ? 1 : 0;
  100. }
  101. }
  102. function integer(a, b) {
  103. const { name, config } = getColumnNameAndConfig(a, b);
  104. if (config?.mode === "timestamp" || config?.mode === "timestamp_ms") {
  105. return new SQLiteTimestampBuilder(name, config.mode);
  106. }
  107. if (config?.mode === "boolean") {
  108. return new SQLiteBooleanBuilder(name, config.mode);
  109. }
  110. return new SQLiteIntegerBuilder(name);
  111. }
  112. const int = integer;
  113. export {
  114. SQLiteBaseInteger,
  115. SQLiteBaseIntegerBuilder,
  116. SQLiteBoolean,
  117. SQLiteBooleanBuilder,
  118. SQLiteInteger,
  119. SQLiteIntegerBuilder,
  120. SQLiteTimestamp,
  121. SQLiteTimestampBuilder,
  122. int,
  123. integer
  124. };
  125. //# sourceMappingURL=integer.js.map