drizzle-orm 1.0.0-beta.2-3a98f3a → 1.0.0-beta.3-bd1ec83
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.
- package/cockroach-core/indexes.cjs +50 -10
- package/cockroach-core/indexes.cjs.map +1 -1
- package/cockroach-core/indexes.d.cts +15 -5
- package/cockroach-core/indexes.d.ts +15 -5
- package/cockroach-core/indexes.js +50 -10
- package/cockroach-core/indexes.js.map +1 -1
- package/gel-core/indexes.cjs +49 -9
- package/gel-core/indexes.cjs.map +1 -1
- package/gel-core/indexes.d.cts +5 -4
- package/gel-core/indexes.d.ts +5 -4
- package/gel-core/indexes.js +49 -9
- package/gel-core/indexes.js.map +1 -1
- package/mysql-core/dialect.cjs +1 -1
- package/mysql-core/dialect.cjs.map +1 -1
- package/mysql-core/dialect.js +1 -1
- package/mysql-core/dialect.js.map +1 -1
- package/mysql-core/query-builders/select.cjs.map +1 -1
- package/mysql-core/query-builders/select.d.cts +2 -1
- package/mysql-core/query-builders/select.d.ts +2 -1
- package/mysql-core/query-builders/select.js.map +1 -1
- package/mysql-core/unique-constraint.cjs +6 -4
- package/mysql-core/unique-constraint.cjs.map +1 -1
- package/mysql-core/unique-constraint.d.cts +6 -7
- package/mysql-core/unique-constraint.d.ts +6 -7
- package/mysql-core/unique-constraint.js +6 -4
- package/mysql-core/unique-constraint.js.map +1 -1
- package/mysql-core/utils.cjs +1 -1
- package/mysql-core/utils.cjs.map +1 -1
- package/mysql-core/utils.js +1 -1
- package/mysql-core/utils.js.map +1 -1
- package/package.json +49 -49
- package/pg-core/indexes.cjs +50 -10
- package/pg-core/indexes.cjs.map +1 -1
- package/pg-core/indexes.d.cts +6 -5
- package/pg-core/indexes.d.ts +6 -5
- package/pg-core/indexes.js +50 -10
- package/pg-core/indexes.js.map +1 -1
- package/sql/expressions/conditions.cjs +2 -2
- package/sql/expressions/conditions.cjs.map +1 -1
- package/sql/expressions/conditions.js +2 -2
- package/sql/expressions/conditions.js.map +1 -1
- package/version.cjs +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -25,9 +25,10 @@ __export(indexes_exports, {
|
|
|
25
25
|
uniqueIndex: () => uniqueIndex
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(indexes_exports);
|
|
28
|
-
var import_sql = require("../sql/sql.cjs");
|
|
29
28
|
var import_entity = require("../entity.cjs");
|
|
29
|
+
var import_sql = require("../sql/sql.cjs");
|
|
30
30
|
var import_columns = require("./columns/index.cjs");
|
|
31
|
+
var import_columns2 = require("./columns/index.cjs");
|
|
31
32
|
class IndexBuilderOn {
|
|
32
33
|
constructor(unique, name) {
|
|
33
34
|
this.unique = unique;
|
|
@@ -40,10 +41,23 @@ class IndexBuilderOn {
|
|
|
40
41
|
if ((0, import_entity.is)(it, import_sql.SQL)) {
|
|
41
42
|
return it;
|
|
42
43
|
}
|
|
44
|
+
if ((0, import_entity.is)(it, import_columns.ExtraConfigColumn)) {
|
|
45
|
+
const clonedIndexedColumn = new import_columns2.IndexedColumn(
|
|
46
|
+
it.name,
|
|
47
|
+
!!it.keyAsName,
|
|
48
|
+
it.columnType,
|
|
49
|
+
it.indexConfig
|
|
50
|
+
);
|
|
51
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
52
|
+
return clonedIndexedColumn;
|
|
53
|
+
}
|
|
43
54
|
it = it;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
55
|
+
return new import_columns2.IndexedColumn(
|
|
56
|
+
it.name,
|
|
57
|
+
!!it.keyAsName,
|
|
58
|
+
it.columnType,
|
|
59
|
+
{}
|
|
60
|
+
);
|
|
47
61
|
}),
|
|
48
62
|
this.unique,
|
|
49
63
|
false,
|
|
@@ -56,10 +70,23 @@ class IndexBuilderOn {
|
|
|
56
70
|
if ((0, import_entity.is)(it, import_sql.SQL)) {
|
|
57
71
|
return it;
|
|
58
72
|
}
|
|
73
|
+
if ((0, import_entity.is)(it, import_columns.ExtraConfigColumn)) {
|
|
74
|
+
const clonedIndexedColumn = new import_columns2.IndexedColumn(
|
|
75
|
+
it.name,
|
|
76
|
+
!!it.keyAsName,
|
|
77
|
+
it.columnType,
|
|
78
|
+
it.indexConfig
|
|
79
|
+
);
|
|
80
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
81
|
+
return clonedIndexedColumn;
|
|
82
|
+
}
|
|
59
83
|
it = it;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
84
|
+
return new import_columns2.IndexedColumn(
|
|
85
|
+
it.name,
|
|
86
|
+
!!it.keyAsName,
|
|
87
|
+
it.columnType,
|
|
88
|
+
{}
|
|
89
|
+
);
|
|
63
90
|
}),
|
|
64
91
|
this.unique,
|
|
65
92
|
true,
|
|
@@ -79,10 +106,23 @@ class IndexBuilderOn {
|
|
|
79
106
|
if ((0, import_entity.is)(it, import_sql.SQL)) {
|
|
80
107
|
return it;
|
|
81
108
|
}
|
|
109
|
+
if ((0, import_entity.is)(it, import_columns.ExtraConfigColumn)) {
|
|
110
|
+
const clonedIndexedColumn = new import_columns2.IndexedColumn(
|
|
111
|
+
it.name,
|
|
112
|
+
!!it.keyAsName,
|
|
113
|
+
it.columnType,
|
|
114
|
+
it.indexConfig
|
|
115
|
+
);
|
|
116
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
117
|
+
return clonedIndexedColumn;
|
|
118
|
+
}
|
|
82
119
|
it = it;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
120
|
+
return new import_columns2.IndexedColumn(
|
|
121
|
+
it.name,
|
|
122
|
+
!!it.keyAsName,
|
|
123
|
+
it.columnType,
|
|
124
|
+
{}
|
|
125
|
+
);
|
|
86
126
|
}),
|
|
87
127
|
this.unique,
|
|
88
128
|
true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cockroach-core/indexes.ts"],"sourcesContent":["import { SQL } from '~/sql/sql.ts';\
|
|
1
|
+
{"version":3,"sources":["../../src/cockroach-core/indexes.ts"],"sourcesContent":["import { entityKind, is } from '~/entity.ts';\nimport { SQL } from '~/sql/sql.ts';\nimport { ExtraConfigColumn } from './columns/index.ts';\nimport type { CockroachColumn } from './columns/index.ts';\nimport { IndexedColumn } from './columns/index.ts';\nimport type { CockroachTable } from './table.ts';\n\ninterface IndexConfig {\n\tname?: string;\n\n\tcolumns: Partial<IndexedColumn | SQL>[];\n\n\t/**\n\t * If true, the index will be created as `create unique index` instead of `create index`.\n\t */\n\tunique: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index ... on only <table>` instead of `create index ... on <table>`.\n\t */\n\tonly: boolean;\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere?: SQL;\n\n\t/**\n\t * The optional USING clause method for the index\n\t */\n\tmethod?: 'btree' | string;\n}\n\nexport type IndexColumn = CockroachColumn;\n\nexport type CockroachIndexMethod =\n\t| 'btree'\n\t| 'hash'\n\t| 'gin'\n\t| 'cspann';\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'CockroachIndexBuilderOn';\n\n\tconstructor(private unique: boolean, private name?: string) {}\n\n\ton(\n\t\t...columns: [\n\t\t\tPartial<ExtraConfigColumn> | SQL | CockroachColumn,\n\t\t\t...Partial<ExtraConfigColumn | SQL | CockroachColumn>[],\n\t\t]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, ExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as CockroachColumn;\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\tfalse,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\tonOnly(\n\t\t...columns: [\n\t\t\tPartial<ExtraConfigColumn | SQL | CockroachColumn>,\n\t\t\t...Partial<ExtraConfigColumn | SQL | CockroachColumn>[],\n\t\t]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, ExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as CockroachColumn;\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\t/**\n\t * Specify what index method to use. Choices are `btree`, `hash`, `gin`, `cspann`. The default method is `btree`.\n\t *\n\t * @param method The name of the index method to be used\n\t * @param columns\n\t * @returns\n\t */\n\tusing(\n\t\tmethod: CockroachIndexMethod,\n\t\t...columns: [\n\t\t\tPartial<ExtraConfigColumn | SQL | CockroachColumn>,\n\t\t\t...Partial<ExtraConfigColumn | SQL | CockroachColumn>[],\n\t\t]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, ExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as CockroachColumn;\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t\tmethod,\n\t\t);\n\t}\n}\n\nexport interface AnyIndexBuilder {\n\tbuild(table: CockroachTable): Index;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IndexBuilder extends AnyIndexBuilder {}\n\nexport class IndexBuilder implements AnyIndexBuilder {\n\tstatic readonly [entityKind]: string = 'CockroachIndexBuilder';\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(\n\t\tcolumns: Partial<IndexedColumn | SQL>[],\n\t\tunique: boolean,\n\t\tonly: boolean,\n\t\tname?: string,\n\t\tmethod: string = 'btree',\n\t) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t\tonly,\n\t\t\tmethod,\n\t\t};\n\t}\n\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: CockroachTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'CockroachIndex';\n\n\treadonly config: IndexConfig & { table: CockroachTable };\n\treadonly isNameExplicit: boolean;\n\n\tconstructor(config: IndexConfig, table: CockroachTable) {\n\t\tthis.config = { ...config, table };\n\t\tthis.isNameExplicit = !!config.name;\n\t}\n}\n\nexport type GetColumnsTableName<TColumns> = TColumns extends CockroachColumn ? TColumns['_']['name']\n\t: TColumns extends CockroachColumn[] ? TColumns[number]['_']['name']\n\t: never;\n\nexport function index(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(false, name);\n}\n\nexport function uniqueIndex(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(true, name);\n}\n"],"mappings":"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","names":["import_columns"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { SQL } from "../sql/sql.cjs";
|
|
2
1
|
import { entityKind } from "../entity.cjs";
|
|
3
|
-
import
|
|
2
|
+
import { SQL } from "../sql/sql.cjs";
|
|
3
|
+
import { ExtraConfigColumn } from "./columns/index.cjs";
|
|
4
|
+
import type { CockroachColumn } from "./columns/index.cjs";
|
|
4
5
|
import { IndexedColumn } from "./columns/index.cjs";
|
|
5
6
|
import type { CockroachTable } from "./table.cjs";
|
|
6
7
|
interface IndexConfig {
|
|
@@ -30,8 +31,14 @@ export declare class IndexBuilderOn {
|
|
|
30
31
|
private name?;
|
|
31
32
|
static readonly [entityKind]: string;
|
|
32
33
|
constructor(unique: boolean, name?: string | undefined);
|
|
33
|
-
on(...columns: [
|
|
34
|
-
|
|
34
|
+
on(...columns: [
|
|
35
|
+
Partial<ExtraConfigColumn> | SQL | CockroachColumn,
|
|
36
|
+
...Partial<ExtraConfigColumn | SQL | CockroachColumn>[]
|
|
37
|
+
]): IndexBuilder;
|
|
38
|
+
onOnly(...columns: [
|
|
39
|
+
Partial<ExtraConfigColumn | SQL | CockroachColumn>,
|
|
40
|
+
...Partial<ExtraConfigColumn | SQL | CockroachColumn>[]
|
|
41
|
+
]): IndexBuilder;
|
|
35
42
|
/**
|
|
36
43
|
* Specify what index method to use. Choices are `btree`, `hash`, `gin`, `cspann`. The default method is `btree`.
|
|
37
44
|
*
|
|
@@ -39,7 +46,10 @@ export declare class IndexBuilderOn {
|
|
|
39
46
|
* @param columns
|
|
40
47
|
* @returns
|
|
41
48
|
*/
|
|
42
|
-
using(method: CockroachIndexMethod, ...columns: [
|
|
49
|
+
using(method: CockroachIndexMethod, ...columns: [
|
|
50
|
+
Partial<ExtraConfigColumn | SQL | CockroachColumn>,
|
|
51
|
+
...Partial<ExtraConfigColumn | SQL | CockroachColumn>[]
|
|
52
|
+
]): IndexBuilder;
|
|
43
53
|
}
|
|
44
54
|
export interface AnyIndexBuilder {
|
|
45
55
|
build(table: CockroachTable): Index;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { SQL } from "../sql/sql.js";
|
|
2
1
|
import { entityKind } from "../entity.js";
|
|
3
|
-
import
|
|
2
|
+
import { SQL } from "../sql/sql.js";
|
|
3
|
+
import { ExtraConfigColumn } from "./columns/index.js";
|
|
4
|
+
import type { CockroachColumn } from "./columns/index.js";
|
|
4
5
|
import { IndexedColumn } from "./columns/index.js";
|
|
5
6
|
import type { CockroachTable } from "./table.js";
|
|
6
7
|
interface IndexConfig {
|
|
@@ -30,8 +31,14 @@ export declare class IndexBuilderOn {
|
|
|
30
31
|
private name?;
|
|
31
32
|
static readonly [entityKind]: string;
|
|
32
33
|
constructor(unique: boolean, name?: string | undefined);
|
|
33
|
-
on(...columns: [
|
|
34
|
-
|
|
34
|
+
on(...columns: [
|
|
35
|
+
Partial<ExtraConfigColumn> | SQL | CockroachColumn,
|
|
36
|
+
...Partial<ExtraConfigColumn | SQL | CockroachColumn>[]
|
|
37
|
+
]): IndexBuilder;
|
|
38
|
+
onOnly(...columns: [
|
|
39
|
+
Partial<ExtraConfigColumn | SQL | CockroachColumn>,
|
|
40
|
+
...Partial<ExtraConfigColumn | SQL | CockroachColumn>[]
|
|
41
|
+
]): IndexBuilder;
|
|
35
42
|
/**
|
|
36
43
|
* Specify what index method to use. Choices are `btree`, `hash`, `gin`, `cspann`. The default method is `btree`.
|
|
37
44
|
*
|
|
@@ -39,7 +46,10 @@ export declare class IndexBuilderOn {
|
|
|
39
46
|
* @param columns
|
|
40
47
|
* @returns
|
|
41
48
|
*/
|
|
42
|
-
using(method: CockroachIndexMethod, ...columns: [
|
|
49
|
+
using(method: CockroachIndexMethod, ...columns: [
|
|
50
|
+
Partial<ExtraConfigColumn | SQL | CockroachColumn>,
|
|
51
|
+
...Partial<ExtraConfigColumn | SQL | CockroachColumn>[]
|
|
52
|
+
]): IndexBuilder;
|
|
43
53
|
}
|
|
44
54
|
export interface AnyIndexBuilder {
|
|
45
55
|
build(table: CockroachTable): Index;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { SQL } from "../sql/sql.js";
|
|
2
1
|
import { entityKind, is } from "../entity.js";
|
|
2
|
+
import { SQL } from "../sql/sql.js";
|
|
3
|
+
import { ExtraConfigColumn } from "./columns/index.js";
|
|
3
4
|
import { IndexedColumn } from "./columns/index.js";
|
|
4
5
|
class IndexBuilderOn {
|
|
5
6
|
constructor(unique, name) {
|
|
@@ -13,10 +14,23 @@ class IndexBuilderOn {
|
|
|
13
14
|
if (is(it, SQL)) {
|
|
14
15
|
return it;
|
|
15
16
|
}
|
|
17
|
+
if (is(it, ExtraConfigColumn)) {
|
|
18
|
+
const clonedIndexedColumn = new IndexedColumn(
|
|
19
|
+
it.name,
|
|
20
|
+
!!it.keyAsName,
|
|
21
|
+
it.columnType,
|
|
22
|
+
it.indexConfig
|
|
23
|
+
);
|
|
24
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
25
|
+
return clonedIndexedColumn;
|
|
26
|
+
}
|
|
16
27
|
it = it;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
return new IndexedColumn(
|
|
29
|
+
it.name,
|
|
30
|
+
!!it.keyAsName,
|
|
31
|
+
it.columnType,
|
|
32
|
+
{}
|
|
33
|
+
);
|
|
20
34
|
}),
|
|
21
35
|
this.unique,
|
|
22
36
|
false,
|
|
@@ -29,10 +43,23 @@ class IndexBuilderOn {
|
|
|
29
43
|
if (is(it, SQL)) {
|
|
30
44
|
return it;
|
|
31
45
|
}
|
|
46
|
+
if (is(it, ExtraConfigColumn)) {
|
|
47
|
+
const clonedIndexedColumn = new IndexedColumn(
|
|
48
|
+
it.name,
|
|
49
|
+
!!it.keyAsName,
|
|
50
|
+
it.columnType,
|
|
51
|
+
it.indexConfig
|
|
52
|
+
);
|
|
53
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
54
|
+
return clonedIndexedColumn;
|
|
55
|
+
}
|
|
32
56
|
it = it;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
57
|
+
return new IndexedColumn(
|
|
58
|
+
it.name,
|
|
59
|
+
!!it.keyAsName,
|
|
60
|
+
it.columnType,
|
|
61
|
+
{}
|
|
62
|
+
);
|
|
36
63
|
}),
|
|
37
64
|
this.unique,
|
|
38
65
|
true,
|
|
@@ -52,10 +79,23 @@ class IndexBuilderOn {
|
|
|
52
79
|
if (is(it, SQL)) {
|
|
53
80
|
return it;
|
|
54
81
|
}
|
|
82
|
+
if (is(it, ExtraConfigColumn)) {
|
|
83
|
+
const clonedIndexedColumn = new IndexedColumn(
|
|
84
|
+
it.name,
|
|
85
|
+
!!it.keyAsName,
|
|
86
|
+
it.columnType,
|
|
87
|
+
it.indexConfig
|
|
88
|
+
);
|
|
89
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
90
|
+
return clonedIndexedColumn;
|
|
91
|
+
}
|
|
55
92
|
it = it;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
93
|
+
return new IndexedColumn(
|
|
94
|
+
it.name,
|
|
95
|
+
!!it.keyAsName,
|
|
96
|
+
it.columnType,
|
|
97
|
+
{}
|
|
98
|
+
);
|
|
59
99
|
}),
|
|
60
100
|
this.unique,
|
|
61
101
|
true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cockroach-core/indexes.ts"],"sourcesContent":["import { SQL } from '~/sql/sql.ts';\
|
|
1
|
+
{"version":3,"sources":["../../src/cockroach-core/indexes.ts"],"sourcesContent":["import { entityKind, is } from '~/entity.ts';\nimport { SQL } from '~/sql/sql.ts';\nimport { ExtraConfigColumn } from './columns/index.ts';\nimport type { CockroachColumn } from './columns/index.ts';\nimport { IndexedColumn } from './columns/index.ts';\nimport type { CockroachTable } from './table.ts';\n\ninterface IndexConfig {\n\tname?: string;\n\n\tcolumns: Partial<IndexedColumn | SQL>[];\n\n\t/**\n\t * If true, the index will be created as `create unique index` instead of `create index`.\n\t */\n\tunique: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index ... on only <table>` instead of `create index ... on <table>`.\n\t */\n\tonly: boolean;\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere?: SQL;\n\n\t/**\n\t * The optional USING clause method for the index\n\t */\n\tmethod?: 'btree' | string;\n}\n\nexport type IndexColumn = CockroachColumn;\n\nexport type CockroachIndexMethod =\n\t| 'btree'\n\t| 'hash'\n\t| 'gin'\n\t| 'cspann';\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'CockroachIndexBuilderOn';\n\n\tconstructor(private unique: boolean, private name?: string) {}\n\n\ton(\n\t\t...columns: [\n\t\t\tPartial<ExtraConfigColumn> | SQL | CockroachColumn,\n\t\t\t...Partial<ExtraConfigColumn | SQL | CockroachColumn>[],\n\t\t]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, ExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as CockroachColumn;\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\tfalse,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\tonOnly(\n\t\t...columns: [\n\t\t\tPartial<ExtraConfigColumn | SQL | CockroachColumn>,\n\t\t\t...Partial<ExtraConfigColumn | SQL | CockroachColumn>[],\n\t\t]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, ExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as CockroachColumn;\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\t/**\n\t * Specify what index method to use. Choices are `btree`, `hash`, `gin`, `cspann`. The default method is `btree`.\n\t *\n\t * @param method The name of the index method to be used\n\t * @param columns\n\t * @returns\n\t */\n\tusing(\n\t\tmethod: CockroachIndexMethod,\n\t\t...columns: [\n\t\t\tPartial<ExtraConfigColumn | SQL | CockroachColumn>,\n\t\t\t...Partial<ExtraConfigColumn | SQL | CockroachColumn>[],\n\t\t]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, ExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as CockroachColumn;\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t\tmethod,\n\t\t);\n\t}\n}\n\nexport interface AnyIndexBuilder {\n\tbuild(table: CockroachTable): Index;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IndexBuilder extends AnyIndexBuilder {}\n\nexport class IndexBuilder implements AnyIndexBuilder {\n\tstatic readonly [entityKind]: string = 'CockroachIndexBuilder';\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(\n\t\tcolumns: Partial<IndexedColumn | SQL>[],\n\t\tunique: boolean,\n\t\tonly: boolean,\n\t\tname?: string,\n\t\tmethod: string = 'btree',\n\t) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t\tonly,\n\t\t\tmethod,\n\t\t};\n\t}\n\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: CockroachTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'CockroachIndex';\n\n\treadonly config: IndexConfig & { table: CockroachTable };\n\treadonly isNameExplicit: boolean;\n\n\tconstructor(config: IndexConfig, table: CockroachTable) {\n\t\tthis.config = { ...config, table };\n\t\tthis.isNameExplicit = !!config.name;\n\t}\n}\n\nexport type GetColumnsTableName<TColumns> = TColumns extends CockroachColumn ? TColumns['_']['name']\n\t: TColumns extends CockroachColumn[] ? TColumns[number]['_']['name']\n\t: never;\n\nexport function index(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(false, name);\n}\n\nexport function uniqueIndex(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(true, name);\n}\n"],"mappings":"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","names":[]}
|
package/gel-core/indexes.cjs
CHANGED
|
@@ -28,6 +28,7 @@ module.exports = __toCommonJS(indexes_exports);
|
|
|
28
28
|
var import_sql = require("../sql/sql.cjs");
|
|
29
29
|
var import_entity = require("../entity.cjs");
|
|
30
30
|
var import_columns = require("./columns/index.cjs");
|
|
31
|
+
var import_columns2 = require("./columns/index.cjs");
|
|
31
32
|
class IndexBuilderOn {
|
|
32
33
|
constructor(unique, name) {
|
|
33
34
|
this.unique = unique;
|
|
@@ -40,10 +41,23 @@ class IndexBuilderOn {
|
|
|
40
41
|
if ((0, import_entity.is)(it, import_sql.SQL)) {
|
|
41
42
|
return it;
|
|
42
43
|
}
|
|
44
|
+
if ((0, import_entity.is)(it, import_columns.GelExtraConfigColumn)) {
|
|
45
|
+
const clonedIndexedColumn = new import_columns2.IndexedColumn(
|
|
46
|
+
it.name,
|
|
47
|
+
!!it.keyAsName,
|
|
48
|
+
it.columnType,
|
|
49
|
+
it.indexConfig
|
|
50
|
+
);
|
|
51
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
52
|
+
return clonedIndexedColumn;
|
|
53
|
+
}
|
|
43
54
|
it = it;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
55
|
+
return new import_columns2.IndexedColumn(
|
|
56
|
+
it.name,
|
|
57
|
+
!!it.keyAsName,
|
|
58
|
+
it.columnType,
|
|
59
|
+
{}
|
|
60
|
+
);
|
|
47
61
|
}),
|
|
48
62
|
this.unique,
|
|
49
63
|
false,
|
|
@@ -56,10 +70,23 @@ class IndexBuilderOn {
|
|
|
56
70
|
if ((0, import_entity.is)(it, import_sql.SQL)) {
|
|
57
71
|
return it;
|
|
58
72
|
}
|
|
73
|
+
if ((0, import_entity.is)(it, import_columns.GelExtraConfigColumn)) {
|
|
74
|
+
const clonedIndexedColumn = new import_columns2.IndexedColumn(
|
|
75
|
+
it.name,
|
|
76
|
+
!!it.keyAsName,
|
|
77
|
+
it.columnType,
|
|
78
|
+
it.indexConfig
|
|
79
|
+
);
|
|
80
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
81
|
+
return clonedIndexedColumn;
|
|
82
|
+
}
|
|
59
83
|
it = it;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
84
|
+
return new import_columns2.IndexedColumn(
|
|
85
|
+
it.name,
|
|
86
|
+
!!it.keyAsName,
|
|
87
|
+
it.columnType,
|
|
88
|
+
{}
|
|
89
|
+
);
|
|
63
90
|
}),
|
|
64
91
|
this.unique,
|
|
65
92
|
true,
|
|
@@ -83,10 +110,23 @@ class IndexBuilderOn {
|
|
|
83
110
|
if ((0, import_entity.is)(it, import_sql.SQL)) {
|
|
84
111
|
return it;
|
|
85
112
|
}
|
|
113
|
+
if ((0, import_entity.is)(it, import_columns.GelExtraConfigColumn)) {
|
|
114
|
+
const clonedIndexedColumn = new import_columns2.IndexedColumn(
|
|
115
|
+
it.name,
|
|
116
|
+
!!it.keyAsName,
|
|
117
|
+
it.columnType,
|
|
118
|
+
it.indexConfig
|
|
119
|
+
);
|
|
120
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
121
|
+
return clonedIndexedColumn;
|
|
122
|
+
}
|
|
86
123
|
it = it;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
124
|
+
return new import_columns2.IndexedColumn(
|
|
125
|
+
it.name,
|
|
126
|
+
!!it.keyAsName,
|
|
127
|
+
it.columnType,
|
|
128
|
+
{}
|
|
129
|
+
);
|
|
90
130
|
}),
|
|
91
131
|
this.unique,
|
|
92
132
|
true,
|
package/gel-core/indexes.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/gel-core/indexes.ts"],"sourcesContent":["import { SQL } from '~/sql/sql.ts';\n\nimport { entityKind, is } from '~/entity.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './columns/index.ts';\nimport { IndexedColumn } from './columns/index.ts';\nimport type { GelTable } from './table.ts';\n\ninterface IndexConfig {\n\tname?: string;\n\n\tcolumns: Partial<IndexedColumn | SQL>[];\n\n\t/**\n\t * If true, the index will be created as `create unique index` instead of `create index`.\n\t */\n\tunique: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index concurrently` instead of `create index`.\n\t */\n\tconcurrently?: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index ... on only <table>` instead of `create index ... on <table>`.\n\t */\n\tonly: boolean;\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere?: SQL;\n\n\t/**\n\t * The optional WITH clause specifies storage parameters for the index\n\t */\n\twith?: Record<string, any>;\n\n\t/**\n\t * The optional WITH clause method for the index\n\t */\n\tmethod?: 'btree' | string;\n}\n\nexport type IndexColumn = GelColumn;\n\nexport type GelIndexMethod =\n\t| 'btree'\n\t| 'hash'\n\t| 'gist'\n\t| 'sGelist'\n\t| 'gin'\n\t| 'brin'\n\t| 'hnsw'\n\t| 'ivfflat'\n\t| (string & {});\n\nexport type GelIndexOpClass =\n\t| 'abstime_ops'\n\t| 'access_method'\n\t| 'anyarray_eq'\n\t| 'anyarray_ge'\n\t| 'anyarray_gt'\n\t| 'anyarray_le'\n\t| 'anyarray_lt'\n\t| 'anyarray_ne'\n\t| 'bigint_ops'\n\t| 'bit_ops'\n\t| 'bool_ops'\n\t| 'box_ops'\n\t| 'bpchar_ops'\n\t| 'char_ops'\n\t| 'cidr_ops'\n\t| 'cstring_ops'\n\t| 'date_ops'\n\t| 'float_ops'\n\t| 'int2_ops'\n\t| 'int4_ops'\n\t| 'int8_ops'\n\t| 'interval_ops'\n\t| 'jsonb_ops'\n\t| 'macaddr_ops'\n\t| 'name_ops'\n\t| 'numeric_ops'\n\t| 'oid_ops'\n\t| 'oidint4_ops'\n\t| 'oidint8_ops'\n\t| 'oidname_ops'\n\t| 'oidvector_ops'\n\t| 'point_ops'\n\t| 'polygon_ops'\n\t| 'range_ops'\n\t| 'record_eq'\n\t| 'record_ge'\n\t| 'record_gt'\n\t| 'record_le'\n\t| 'record_lt'\n\t| 'record_ne'\n\t| 'text_ops'\n\t| 'time_ops'\n\t| 'timestamp_ops'\n\t| 'timestamptz_ops'\n\t| 'timetz_ops'\n\t| 'uuid_ops'\n\t| 'varbit_ops'\n\t| 'varchar_ops'\n\t| 'xml_ops'\n\t| 'vector_l2_ops'\n\t| 'vector_ip_ops'\n\t| 'vector_cosine_ops'\n\t| 'vector_l1_ops'\n\t| 'bit_hamming_ops'\n\t| 'bit_jaccard_ops'\n\t| 'halfvec_l2_ops'\n\t| 'sparsevec_l2_op'\n\t| (string & {});\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'GelIndexBuilderOn';\n\n\tconstructor(private unique: boolean, private name?: string) {}\n\n\ton(...columns: [Partial<GelExtraConfigColumn> | SQL, ...Partial<GelExtraConfigColumn | SQL>[]]): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\t\t\t\tit = it as GelExtraConfigColumn;\n\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(it.name, !!it.keyAsName, it.columnType!, it.indexConfig!);\n\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\treturn clonedIndexedColumn;\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\tfalse,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\tonOnly(...columns: [Partial<GelExtraConfigColumn | SQL>, ...Partial<GelExtraConfigColumn | SQL>[]]): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\t\t\t\tit = it as GelExtraConfigColumn;\n\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(it.name, !!it.keyAsName, it.columnType!, it.indexConfig!);\n\t\t\t\tit.indexConfig = it.defaultConfig;\n\t\t\t\treturn clonedIndexedColumn;\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\t/**\n\t * Specify what index method to use. Choices are `btree`, `hash`, `gist`, `sGelist`, `gin`, `brin`, or user-installed access methods like `bloom`. The default method is `btree.\n\t *\n\t * If you have the `Gel_vector` extension installed in your database, you can use the `hnsw` and `ivfflat` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the method, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param method The name of the index method to be used\n\t * @param columns\n\t * @returns\n\t */\n\tusing(\n\t\tmethod: GelIndexMethod,\n\t\t...columns: [Partial<GelExtraConfigColumn | SQL>, ...Partial<GelExtraConfigColumn | SQL>[]]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\t\t\t\tit = it as GelExtraConfigColumn;\n\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(it.name, !!it.keyAsName, it.columnType!, it.indexConfig!);\n\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\treturn clonedIndexedColumn;\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t\tmethod,\n\t\t);\n\t}\n}\n\nexport interface AnyIndexBuilder {\n\tbuild(table: GelTable): Index;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IndexBuilder extends AnyIndexBuilder {}\n\nexport class IndexBuilder implements AnyIndexBuilder {\n\tstatic readonly [entityKind]: string = 'GelIndexBuilder';\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(\n\t\tcolumns: Partial<IndexedColumn | SQL>[],\n\t\tunique: boolean,\n\t\tonly: boolean,\n\t\tname?: string,\n\t\tmethod: string = 'btree',\n\t) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t\tonly,\n\t\t\tmethod,\n\t\t};\n\t}\n\n\tconcurrently(): this {\n\t\tthis.config.concurrently = true;\n\t\treturn this;\n\t}\n\n\twith(obj: Record<string, any>): this {\n\t\tthis.config.with = obj;\n\t\treturn this;\n\t}\n\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: GelTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'GelIndex';\n\n\treadonly config: IndexConfig & { table: GelTable };\n\n\tconstructor(config: IndexConfig, table: GelTable) {\n\t\tthis.config = { ...config, table };\n\t}\n}\n\nexport type GetColumnsTableName<TColumns> = TColumns extends GelColumn ? TColumns['_']['name']\n\t: TColumns extends GelColumn[] ? TColumns[number]['_']['name']\n\t: never;\n\nexport function index(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(false, name);\n}\n\nexport function uniqueIndex(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(true, name);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AAEpB,oBAA+B;AAE/B,qBAA8B;AAgHvB,MAAM,eAAe;AAAA,EAG3B,YAAoB,QAAyB,MAAe;AAAxC;AAAyB;AAAA,EAAgB;AAAA,EAF7D,QAAiB,wBAAU,IAAY;AAAA,EAIvC,MAAM,SAAwG;AAC7G,WAAO,IAAI;AAAA,MACV,QAAQ,IAAI,CAAC,OAAO;AACnB,gBAAI,kBAAG,IAAI,cAAG,GAAG;AAChB,iBAAO;AAAA,QACR;AACA,aAAK;AACL,cAAM,sBAAsB,IAAI,6BAAc,GAAG,MAAM,CAAC,CAAC,GAAG,WAAW,GAAG,YAAa,GAAG,WAAY;AACtG,WAAG,cAAc,KAAK,MAAM,KAAK,UAAU,GAAG,aAAa,CAAC;AAC5D,eAAO;AAAA,MACR,CAAC;AAAA,MACD,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA,EAEA,UAAU,SAAwG;AACjH,WAAO,IAAI;AAAA,MACV,QAAQ,IAAI,CAAC,OAAO;AACnB,gBAAI,kBAAG,IAAI,cAAG,GAAG;AAChB,iBAAO;AAAA,QACR;AACA,aAAK;AACL,cAAM,sBAAsB,IAAI,6BAAc,GAAG,MAAM,CAAC,CAAC,GAAG,WAAW,GAAG,YAAa,GAAG,WAAY;AACtG,WAAG,cAAc,GAAG;AACpB,eAAO;AAAA,MACR,CAAC;AAAA,MACD,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MACC,WACG,SACY;AACf,WAAO,IAAI;AAAA,MACV,QAAQ,IAAI,CAAC,OAAO;AACnB,gBAAI,kBAAG,IAAI,cAAG,GAAG;AAChB,iBAAO;AAAA,QACR;AACA,aAAK;AACL,cAAM,sBAAsB,IAAI,6BAAc,GAAG,MAAM,CAAC,CAAC,GAAG,WAAW,GAAG,YAAa,GAAG,WAAY;AACtG,WAAG,cAAc,KAAK,MAAM,KAAK,UAAU,GAAG,aAAa,CAAC;AAC5D,eAAO;AAAA,MACR,CAAC;AAAA,MACD,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACD;AAAA,EACD;AACD;AASO,MAAM,aAAwC;AAAA,EACpD,QAAiB,wBAAU,IAAY;AAAA;AAAA,EAGvC;AAAA,EAEA,YACC,SACA,QACA,MACA,MACA,SAAiB,SAChB;AACD,SAAK,SAAS;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,eAAqB;AACpB,SAAK,OAAO,eAAe;AAC3B,WAAO;AAAA,EACR;AAAA,EAEA,KAAK,KAAgC;AACpC,SAAK,OAAO,OAAO;AACnB,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,WAAsB;AAC3B,SAAK,OAAO,QAAQ;AACpB,WAAO;AAAA,EACR;AAAA;AAAA,EAGA,MAAM,OAAwB;AAC7B,WAAO,IAAI,MAAM,KAAK,QAAQ,KAAK;AAAA,EACpC;AACD;AAEO,MAAM,MAAM;AAAA,EAClB,QAAiB,wBAAU,IAAY;AAAA,EAE9B;AAAA,EAET,YAAY,QAAqB,OAAiB;AACjD,SAAK,SAAS,EAAE,GAAG,QAAQ,MAAM;AAAA,EAClC;AACD;AAMO,SAAS,MAAM,MAA+B;AACpD,SAAO,IAAI,eAAe,OAAO,IAAI;AACtC;AAEO,SAAS,YAAY,MAA+B;AAC1D,SAAO,IAAI,eAAe,MAAM,IAAI;AACrC;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/gel-core/indexes.ts"],"sourcesContent":["import { SQL } from '~/sql/sql.ts';\n\nimport { entityKind, is } from '~/entity.ts';\nimport type { GelColumn } from './columns/index.ts';\nimport { GelExtraConfigColumn } from './columns/index.ts';\nimport { IndexedColumn } from './columns/index.ts';\nimport type { GelTable } from './table.ts';\n\ninterface IndexConfig {\n\tname?: string;\n\n\tcolumns: Partial<IndexedColumn | SQL>[];\n\n\t/**\n\t * If true, the index will be created as `create unique index` instead of `create index`.\n\t */\n\tunique: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index concurrently` instead of `create index`.\n\t */\n\tconcurrently?: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index ... on only <table>` instead of `create index ... on <table>`.\n\t */\n\tonly: boolean;\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere?: SQL;\n\n\t/**\n\t * The optional WITH clause specifies storage parameters for the index\n\t */\n\twith?: Record<string, any>;\n\n\t/**\n\t * The optional WITH clause method for the index\n\t */\n\tmethod?: 'btree' | string;\n}\n\nexport type IndexColumn = GelColumn;\n\nexport type GelIndexMethod =\n\t| 'btree'\n\t| 'hash'\n\t| 'gist'\n\t| 'sGelist'\n\t| 'gin'\n\t| 'brin'\n\t| 'hnsw'\n\t| 'ivfflat'\n\t| (string & {});\n\nexport type GelIndexOpClass =\n\t| 'abstime_ops'\n\t| 'access_method'\n\t| 'anyarray_eq'\n\t| 'anyarray_ge'\n\t| 'anyarray_gt'\n\t| 'anyarray_le'\n\t| 'anyarray_lt'\n\t| 'anyarray_ne'\n\t| 'bigint_ops'\n\t| 'bit_ops'\n\t| 'bool_ops'\n\t| 'box_ops'\n\t| 'bpchar_ops'\n\t| 'char_ops'\n\t| 'cidr_ops'\n\t| 'cstring_ops'\n\t| 'date_ops'\n\t| 'float_ops'\n\t| 'int2_ops'\n\t| 'int4_ops'\n\t| 'int8_ops'\n\t| 'interval_ops'\n\t| 'jsonb_ops'\n\t| 'macaddr_ops'\n\t| 'name_ops'\n\t| 'numeric_ops'\n\t| 'oid_ops'\n\t| 'oidint4_ops'\n\t| 'oidint8_ops'\n\t| 'oidname_ops'\n\t| 'oidvector_ops'\n\t| 'point_ops'\n\t| 'polygon_ops'\n\t| 'range_ops'\n\t| 'record_eq'\n\t| 'record_ge'\n\t| 'record_gt'\n\t| 'record_le'\n\t| 'record_lt'\n\t| 'record_ne'\n\t| 'text_ops'\n\t| 'time_ops'\n\t| 'timestamp_ops'\n\t| 'timestamptz_ops'\n\t| 'timetz_ops'\n\t| 'uuid_ops'\n\t| 'varbit_ops'\n\t| 'varchar_ops'\n\t| 'xml_ops'\n\t| 'vector_l2_ops'\n\t| 'vector_ip_ops'\n\t| 'vector_cosine_ops'\n\t| 'vector_l1_ops'\n\t| 'bit_hamming_ops'\n\t| 'bit_jaccard_ops'\n\t| 'halfvec_l2_ops'\n\t| 'sparsevec_l2_op'\n\t| (string & {});\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'GelIndexBuilderOn';\n\n\tconstructor(private unique: boolean, private name?: string) {}\n\n\ton(\n\t\t...columns: [Partial<GelExtraConfigColumn> | SQL | GelColumn, ...Partial<GelExtraConfigColumn | SQL | GelColumn>[]]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, GelExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as GelColumn;\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\tfalse,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\tonOnly(\n\t\t...columns: [Partial<GelExtraConfigColumn | SQL | GelColumn>, ...Partial<GelExtraConfigColumn | SQL | GelColumn>[]]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, GelExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as GelColumn;\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\t/**\n\t * Specify what index method to use. Choices are `btree`, `hash`, `gist`, `sGelist`, `gin`, `brin`, or user-installed access methods like `bloom`. The default method is `btree.\n\t *\n\t * If you have the `Gel_vector` extension installed in your database, you can use the `hnsw` and `ivfflat` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the method, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param method The name of the index method to be used\n\t * @param columns\n\t * @returns\n\t */\n\tusing(\n\t\tmethod: GelIndexMethod,\n\t\t...columns: [Partial<GelExtraConfigColumn | SQL | GelColumn>, ...Partial<GelExtraConfigColumn | SQL | GelColumn>[]]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, GelExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as GelColumn;\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t\tmethod,\n\t\t);\n\t}\n}\n\nexport interface AnyIndexBuilder {\n\tbuild(table: GelTable): Index;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IndexBuilder extends AnyIndexBuilder {}\n\nexport class IndexBuilder implements AnyIndexBuilder {\n\tstatic readonly [entityKind]: string = 'GelIndexBuilder';\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(\n\t\tcolumns: Partial<IndexedColumn | SQL>[],\n\t\tunique: boolean,\n\t\tonly: boolean,\n\t\tname?: string,\n\t\tmethod: string = 'btree',\n\t) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t\tonly,\n\t\t\tmethod,\n\t\t};\n\t}\n\n\tconcurrently(): this {\n\t\tthis.config.concurrently = true;\n\t\treturn this;\n\t}\n\n\twith(obj: Record<string, any>): this {\n\t\tthis.config.with = obj;\n\t\treturn this;\n\t}\n\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: GelTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'GelIndex';\n\n\treadonly config: IndexConfig & { table: GelTable };\n\n\tconstructor(config: IndexConfig, table: GelTable) {\n\t\tthis.config = { ...config, table };\n\t}\n}\n\nexport type GetColumnsTableName<TColumns> = TColumns extends GelColumn ? TColumns['_']['name']\n\t: TColumns extends GelColumn[] ? TColumns[number]['_']['name']\n\t: never;\n\nexport function index(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(false, name);\n}\n\nexport function uniqueIndex(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(true, name);\n}\n"],"mappings":"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","names":["import_columns"]}
|
package/gel-core/indexes.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SQL } from "../sql/sql.cjs";
|
|
2
2
|
import { entityKind } from "../entity.cjs";
|
|
3
|
-
import type { GelColumn
|
|
3
|
+
import type { GelColumn } from "./columns/index.cjs";
|
|
4
|
+
import { GelExtraConfigColumn } from "./columns/index.cjs";
|
|
4
5
|
import { IndexedColumn } from "./columns/index.cjs";
|
|
5
6
|
import type { GelTable } from "./table.cjs";
|
|
6
7
|
interface IndexConfig {
|
|
@@ -39,8 +40,8 @@ export declare class IndexBuilderOn {
|
|
|
39
40
|
private name?;
|
|
40
41
|
static readonly [entityKind]: string;
|
|
41
42
|
constructor(unique: boolean, name?: string | undefined);
|
|
42
|
-
on(...columns: [Partial<GelExtraConfigColumn> | SQL, ...Partial<GelExtraConfigColumn | SQL>[]]): IndexBuilder;
|
|
43
|
-
onOnly(...columns: [Partial<GelExtraConfigColumn | SQL>, ...Partial<GelExtraConfigColumn | SQL>[]]): IndexBuilder;
|
|
43
|
+
on(...columns: [Partial<GelExtraConfigColumn> | SQL | GelColumn, ...Partial<GelExtraConfigColumn | SQL | GelColumn>[]]): IndexBuilder;
|
|
44
|
+
onOnly(...columns: [Partial<GelExtraConfigColumn | SQL | GelColumn>, ...Partial<GelExtraConfigColumn | SQL | GelColumn>[]]): IndexBuilder;
|
|
44
45
|
/**
|
|
45
46
|
* Specify what index method to use. Choices are `btree`, `hash`, `gist`, `sGelist`, `gin`, `brin`, or user-installed access methods like `bloom`. The default method is `btree.
|
|
46
47
|
*
|
|
@@ -52,7 +53,7 @@ export declare class IndexBuilderOn {
|
|
|
52
53
|
* @param columns
|
|
53
54
|
* @returns
|
|
54
55
|
*/
|
|
55
|
-
using(method: GelIndexMethod, ...columns: [Partial<GelExtraConfigColumn | SQL>, ...Partial<GelExtraConfigColumn | SQL>[]]): IndexBuilder;
|
|
56
|
+
using(method: GelIndexMethod, ...columns: [Partial<GelExtraConfigColumn | SQL | GelColumn>, ...Partial<GelExtraConfigColumn | SQL | GelColumn>[]]): IndexBuilder;
|
|
56
57
|
}
|
|
57
58
|
export interface AnyIndexBuilder {
|
|
58
59
|
build(table: GelTable): Index;
|
package/gel-core/indexes.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SQL } from "../sql/sql.js";
|
|
2
2
|
import { entityKind } from "../entity.js";
|
|
3
|
-
import type { GelColumn
|
|
3
|
+
import type { GelColumn } from "./columns/index.js";
|
|
4
|
+
import { GelExtraConfigColumn } from "./columns/index.js";
|
|
4
5
|
import { IndexedColumn } from "./columns/index.js";
|
|
5
6
|
import type { GelTable } from "./table.js";
|
|
6
7
|
interface IndexConfig {
|
|
@@ -39,8 +40,8 @@ export declare class IndexBuilderOn {
|
|
|
39
40
|
private name?;
|
|
40
41
|
static readonly [entityKind]: string;
|
|
41
42
|
constructor(unique: boolean, name?: string | undefined);
|
|
42
|
-
on(...columns: [Partial<GelExtraConfigColumn> | SQL, ...Partial<GelExtraConfigColumn | SQL>[]]): IndexBuilder;
|
|
43
|
-
onOnly(...columns: [Partial<GelExtraConfigColumn | SQL>, ...Partial<GelExtraConfigColumn | SQL>[]]): IndexBuilder;
|
|
43
|
+
on(...columns: [Partial<GelExtraConfigColumn> | SQL | GelColumn, ...Partial<GelExtraConfigColumn | SQL | GelColumn>[]]): IndexBuilder;
|
|
44
|
+
onOnly(...columns: [Partial<GelExtraConfigColumn | SQL | GelColumn>, ...Partial<GelExtraConfigColumn | SQL | GelColumn>[]]): IndexBuilder;
|
|
44
45
|
/**
|
|
45
46
|
* Specify what index method to use. Choices are `btree`, `hash`, `gist`, `sGelist`, `gin`, `brin`, or user-installed access methods like `bloom`. The default method is `btree.
|
|
46
47
|
*
|
|
@@ -52,7 +53,7 @@ export declare class IndexBuilderOn {
|
|
|
52
53
|
* @param columns
|
|
53
54
|
* @returns
|
|
54
55
|
*/
|
|
55
|
-
using(method: GelIndexMethod, ...columns: [Partial<GelExtraConfigColumn | SQL>, ...Partial<GelExtraConfigColumn | SQL>[]]): IndexBuilder;
|
|
56
|
+
using(method: GelIndexMethod, ...columns: [Partial<GelExtraConfigColumn | SQL | GelColumn>, ...Partial<GelExtraConfigColumn | SQL | GelColumn>[]]): IndexBuilder;
|
|
56
57
|
}
|
|
57
58
|
export interface AnyIndexBuilder {
|
|
58
59
|
build(table: GelTable): Index;
|
package/gel-core/indexes.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SQL } from "../sql/sql.js";
|
|
2
2
|
import { entityKind, is } from "../entity.js";
|
|
3
|
+
import { GelExtraConfigColumn } from "./columns/index.js";
|
|
3
4
|
import { IndexedColumn } from "./columns/index.js";
|
|
4
5
|
class IndexBuilderOn {
|
|
5
6
|
constructor(unique, name) {
|
|
@@ -13,10 +14,23 @@ class IndexBuilderOn {
|
|
|
13
14
|
if (is(it, SQL)) {
|
|
14
15
|
return it;
|
|
15
16
|
}
|
|
17
|
+
if (is(it, GelExtraConfigColumn)) {
|
|
18
|
+
const clonedIndexedColumn = new IndexedColumn(
|
|
19
|
+
it.name,
|
|
20
|
+
!!it.keyAsName,
|
|
21
|
+
it.columnType,
|
|
22
|
+
it.indexConfig
|
|
23
|
+
);
|
|
24
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
25
|
+
return clonedIndexedColumn;
|
|
26
|
+
}
|
|
16
27
|
it = it;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
return new IndexedColumn(
|
|
29
|
+
it.name,
|
|
30
|
+
!!it.keyAsName,
|
|
31
|
+
it.columnType,
|
|
32
|
+
{}
|
|
33
|
+
);
|
|
20
34
|
}),
|
|
21
35
|
this.unique,
|
|
22
36
|
false,
|
|
@@ -29,10 +43,23 @@ class IndexBuilderOn {
|
|
|
29
43
|
if (is(it, SQL)) {
|
|
30
44
|
return it;
|
|
31
45
|
}
|
|
46
|
+
if (is(it, GelExtraConfigColumn)) {
|
|
47
|
+
const clonedIndexedColumn = new IndexedColumn(
|
|
48
|
+
it.name,
|
|
49
|
+
!!it.keyAsName,
|
|
50
|
+
it.columnType,
|
|
51
|
+
it.indexConfig
|
|
52
|
+
);
|
|
53
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
54
|
+
return clonedIndexedColumn;
|
|
55
|
+
}
|
|
32
56
|
it = it;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
57
|
+
return new IndexedColumn(
|
|
58
|
+
it.name,
|
|
59
|
+
!!it.keyAsName,
|
|
60
|
+
it.columnType,
|
|
61
|
+
{}
|
|
62
|
+
);
|
|
36
63
|
}),
|
|
37
64
|
this.unique,
|
|
38
65
|
true,
|
|
@@ -56,10 +83,23 @@ class IndexBuilderOn {
|
|
|
56
83
|
if (is(it, SQL)) {
|
|
57
84
|
return it;
|
|
58
85
|
}
|
|
86
|
+
if (is(it, GelExtraConfigColumn)) {
|
|
87
|
+
const clonedIndexedColumn = new IndexedColumn(
|
|
88
|
+
it.name,
|
|
89
|
+
!!it.keyAsName,
|
|
90
|
+
it.columnType,
|
|
91
|
+
it.indexConfig
|
|
92
|
+
);
|
|
93
|
+
it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
|
|
94
|
+
return clonedIndexedColumn;
|
|
95
|
+
}
|
|
59
96
|
it = it;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
97
|
+
return new IndexedColumn(
|
|
98
|
+
it.name,
|
|
99
|
+
!!it.keyAsName,
|
|
100
|
+
it.columnType,
|
|
101
|
+
{}
|
|
102
|
+
);
|
|
63
103
|
}),
|
|
64
104
|
this.unique,
|
|
65
105
|
true,
|