namirasoft-node-clickhouse 1.4.1 → 1.4.2

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.
@@ -7,7 +7,7 @@ import { BaseClickhouseModelSchema } from "./BaseClickhouseModelSchema";
7
7
  export declare abstract class BaseClickhouseTable<D extends BaseClickhouseDatabase> extends BaseTable<D, BaseClickhouseModelSchemaColumnOptions> {
8
8
  name: string;
9
9
  schema: BaseClickhouseModelSchema;
10
- constructor(database: D, name: string);
10
+ constructor(database: D, name: string, schema: BaseClickhouseModelSchema);
11
11
  getName(): string;
12
12
  getSecureColumns(): string[];
13
13
  getReadOnlyColumns(): string[];
@@ -5,9 +5,10 @@ const namirasoft_node_1 = require("namirasoft-node");
5
5
  const namirasoft_core_1 = require("namirasoft-core");
6
6
  const namirasoft_schema_1 = require("namirasoft-schema");
7
7
  class BaseClickhouseTable extends namirasoft_node_1.BaseTable {
8
- constructor(database, name) {
8
+ constructor(database, name, schema) {
9
9
  super(database);
10
10
  this.name = name;
11
+ this.schema = schema;
11
12
  }
12
13
  getName() {
13
14
  return this.name;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseClickhouseTable.js","sourceRoot":"","sources":["../src/BaseClickhouseTable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseClickhouseTable.js","sourceRoot":"","sources":["../src/BaseClickhouseTable.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "framework": "npm",
9
9
  "application": "package",
10
10
  "private": false,
11
- "version": "1.4.1",
11
+ "version": "1.4.2",
12
12
  "author": "Amir Abolhasani",
13
13
  "license": "MIT",
14
14
  "main": "./dist/index.js",
@@ -1,41 +1,41 @@
1
- import { Logger } from "namirasoft-log";
2
- import { BaseDatabase } from "namirasoft-node";
3
- import { createClient } from '@clickhouse/client';
4
- import { NodeClickHouseClient } from '@clickhouse/client/dist/client';
5
-
6
- export abstract class BaseClickhouseDatabase extends BaseDatabase
7
- {
8
- public client!: NodeClickHouseClient;
9
- private name: string;
10
- constructor(isHTTPS: boolean, host: string, port: number, name: string, user: string, pass: string, params?: { [name: string]: string })
11
- {
12
- super();
13
- let parameters = Object.keys(params ?? {}).map(key => `${key}=>${params?.[key]}`).join("&");
14
- if (!process.env.NAMIRASOFT_MUTE)
15
- {
16
- this.client = createClient({
17
- url: `http${isHTTPS ? "s" : ""}://${user}:${pass}@${host}:${port}/${name}${parameters.length > 0 ? ("?" + parameters) : ""}`,
18
- })
19
- }
20
- this.name = name;
21
- }
22
- override async connect()
23
- {
24
- if (!process.env.NAMIRASOFT_MUTE)
25
- {
26
- await this.client.ping();
27
- Logger.main?.success(`Database Clickhouse was connected to ${this.name}`);
28
- }
29
- }
30
- override async sync(force: boolean)
31
- {
32
- if (!process.env.NAMIRASOFT_MUTE)
33
- if (force)
34
- {
35
- // There is no such a feature
36
- }
37
- }
38
- override getSortOptions()
39
- {
40
- }
1
+ import { Logger } from "namirasoft-log";
2
+ import { BaseDatabase } from "namirasoft-node";
3
+ import { createClient } from '@clickhouse/client';
4
+ import { NodeClickHouseClient } from '@clickhouse/client/dist/client';
5
+
6
+ export abstract class BaseClickhouseDatabase extends BaseDatabase
7
+ {
8
+ public client!: NodeClickHouseClient;
9
+ private name: string;
10
+ constructor(isHTTPS: boolean, host: string, port: number, name: string, user: string, pass: string, params?: { [name: string]: string })
11
+ {
12
+ super();
13
+ let parameters = Object.keys(params ?? {}).map(key => `${key}=>${params?.[key]}`).join("&");
14
+ if (!process.env.NAMIRASOFT_MUTE)
15
+ {
16
+ this.client = createClient({
17
+ url: `http${isHTTPS ? "s" : ""}://${user}:${pass}@${host}:${port}/${name}${parameters.length > 0 ? ("?" + parameters) : ""}`,
18
+ })
19
+ }
20
+ this.name = name;
21
+ }
22
+ override async connect()
23
+ {
24
+ if (!process.env.NAMIRASOFT_MUTE)
25
+ {
26
+ await this.client.ping();
27
+ Logger.main?.success(`Database Clickhouse was connected to ${this.name}`);
28
+ }
29
+ }
30
+ override async sync(force: boolean)
31
+ {
32
+ if (!process.env.NAMIRASOFT_MUTE)
33
+ if (force)
34
+ {
35
+ // There is no such a feature
36
+ }
37
+ }
38
+ override getSortOptions()
39
+ {
40
+ }
41
41
  }
@@ -1,5 +1,5 @@
1
- import { BaseClickhouseModelSchemaColumnOptions } from "./BaseClickhouseModelSchemaColumnOptions";
2
-
3
- export type BaseClickhouseModelSchema<TAttributes = any> = {
4
- [name in keyof TAttributes]: BaseClickhouseModelSchemaColumnOptions;
1
+ import { BaseClickhouseModelSchemaColumnOptions } from "./BaseClickhouseModelSchemaColumnOptions";
2
+
3
+ export type BaseClickhouseModelSchema<TAttributes = any> = {
4
+ [name in keyof TAttributes]: BaseClickhouseModelSchemaColumnOptions;
5
5
  }
@@ -1,7 +1,7 @@
1
- import { BaseTableColumnOptions } from "namirasoft-node";
2
-
3
- export interface BaseClickhouseModelSchemaColumnOptions extends BaseTableColumnOptions
4
- {
5
- type: any;
6
- required: boolean;
1
+ import { BaseTableColumnOptions } from "namirasoft-node";
2
+
3
+ export interface BaseClickhouseModelSchemaColumnOptions extends BaseTableColumnOptions
4
+ {
5
+ type: any;
6
+ required: boolean;
7
7
  };
@@ -1,159 +1,131 @@
1
- import { BaseClickhouseDatabase } from "./BaseClickhouseDatabase";
2
- import { BaseTable } from "namirasoft-node";
3
- import { BaseMetaColumn, BaseMetaTable } from "namirasoft-core";
4
- import { AnySchema, ArraySchema, BaseTypeSchema, BoolSchema, DateTimeSchema, DoubleSchema, StringSchema, TypeSchema, VariableSchema } from "namirasoft-schema";
5
- import { BaseClickhouseModelSchemaColumnOptions } from "./BaseClickhouseModelSchemaColumnOptions";
6
- import { BaseClickhouseModelSchema } from "./BaseClickhouseModelSchema";
7
-
8
- export abstract class BaseClickhouseTable<D extends BaseClickhouseDatabase> extends BaseTable<D, BaseClickhouseModelSchemaColumnOptions>
9
- {
10
- name!: string;
11
- schema!: BaseClickhouseModelSchema;
12
- constructor(database: D, name: string)
13
- {
14
- super(database);
15
- this.name = name;
16
- }
17
- override getName(): string
18
- {
19
- return this.name;
20
- }
21
- override getSecureColumns(): string[]
22
- {
23
- let columns = super.getSecureColumns();
24
- return ["_id", "__v", "deleted_at", "deletedAt", ...columns]
25
- }
26
- override getReadOnlyColumns(): string[]
27
- {
28
- let columns = super.getReadOnlyColumns();
29
- return ["id", "created_at", "updated_at", "createdAt", "updatedAt", ...columns];
30
- }
31
- private getModelAllSchemas()
32
- {
33
- let otherAttributes: BaseClickhouseModelSchema = {
34
- _id: { type: String, required: true },
35
- __v: { type: String, required: true },
36
- };
37
- return { ... this.schema, ...otherAttributes };
38
- }
39
- public override getColumnOption(name: string)
40
- {
41
- let schema = this.getModelAllSchemas();
42
- return schema[name] as BaseClickhouseModelSchemaColumnOptions;
43
- }
44
- public override forEachColumn(handler: (name: string, column: BaseClickhouseModelSchemaColumnOptions) => void)
45
- {
46
- let schema = this.getModelAllSchemas();
47
- let keys = Object.keys(schema);
48
- for (let i = 0; i < keys.length; i++)
49
- handler(keys[i], this.getColumnOption(keys[i]));
50
- }
51
- public override getColumn(name: string): BaseMetaColumn
52
- {
53
- let option = this.getColumnOption(name);
54
- let table_name = this.getName();
55
- let table = new BaseMetaTable(null, table_name, table_name);
56
- let type = option.type;
57
- try
58
- {
59
- if (typeof (type) == "function")
60
- type = type.name;
61
- } catch (error)
62
- {
63
- }
64
- let column = new BaseMetaColumn(table, name, name, type, option.required);
65
- return column;
66
- }
67
- protected override getTypeSchema(option: BaseClickhouseModelSchemaColumnOptions): BaseTypeSchema
68
- {
69
- let required = option.required;
70
- /* VariableType */
71
- if (option.type === Boolean)
72
- return new BoolSchema(required);
73
- // else if (type instanceof Number)
74
- // return new TinyIntSchema(required);
75
- // else if (type instanceof DataTypes.SMALLINT)
76
- // return new SmallIntSchema(required);
77
- // else if (type instanceof DataTypes.MEDIUMINT)
78
- // return new MediumIntSchema(required);
79
- // else if (type instanceof DataTypes.INTEGER)
80
- // return new IntegerSchema(required);
81
- // else if (type instanceof DataTypes.BIGINT)
82
- // return new BigIntSchema(required);
83
- // else if (this.isFloat(type))
84
- // return new FloatSchema(required, type.options.decimals);
85
- else if (option.type === Number)
86
- return new DoubleSchema(required, null);
87
- // else if (this.isDecimal(type))
88
- // return new DecimalSchema(required, type.options.scale);
89
- // else if (this.isReal(type))
90
- // return new RealSchema(required, type.options.decimals);
91
- // else if (this.isChar(type))
92
- // return new StringSchema(required, type.options.length, type.options.length);
93
- else if (option.type === String)
94
- return new StringSchema(required, null, null);
95
- // else if (type instanceof DataTypes.TEXT)
96
- // return new StringSchema(required, null, null);
97
- else if (option.type === Date)
98
- return new DateTimeSchema(required);
99
- // else if (type instanceof DataTypes.DATEONLY)
100
- // return new DateSchema(required);
101
- // else if (type instanceof DataTypes.TIME)
102
- // return new TimeSchema(required);
103
- // else if (type instanceof DataTypes.DURATION)
104
- // return new DurationSchema(required);
105
- // else if (this.isEnum(type))
106
- // {
107
- // let name = NamingConvention.lower_case_underscore.convert(this.model.modelName + "_" + element.field, NamingConvention.Pascal_Case);
108
- // return new EnumSchema(name, required, type.options.values);
109
- // }
110
- // else if (type instanceof DataTypes.JSON)
111
- // return new AnySchema(required);
112
- else if (option.type === Object)
113
- {
114
- let tags_type = option.tags?.type;
115
- if (tags_type)
116
- {
117
- if (tags_type === "BaseTypeSchema")
118
- return new TypeSchema(required);
119
- if (tags_type === "BaseVariableSchema")
120
- return new VariableSchema(required);
121
- if (tags_type === "BaseTypeSchema[]")
122
- return new ArraySchema(required, [new TypeSchema(required)]);
123
- if (tags_type === "BaseVariableSchema[]")
124
- return new ArraySchema(required, [new VariableSchema(required)]);
125
- }
126
- return new AnySchema(required);
127
- }
128
- throw new Error("Unsupported datatype for schema: " + option);
129
- }
130
- // async _getOrNull(filter?: FilterQuery<M>, projection?: ProjectionType<M> | null, options?: QueryOptions<M> | null): Promise<BaseDocument<M> | null>
131
- // {
132
- // return await this.model.findOne(filter, projection, options);
133
- // }
134
- // async _get(filter?: FilterQuery<M>, projection?: ProjectionType<M> | null, options?: QueryOptions<M> | null): Promise<BaseDocument<M>>
135
- // {
136
- // let value = await this._getOrNull(filter, projection, options);
137
- // if (value != null)
138
- // return value;
139
- // throw this.getNotFoundError(filter);
140
- // }
141
- // async _list(where: { [name: string]: any }, pagination: { dont: true } | { page: number, size: number }, sorts: { dont: true } | SortItem[]): Promise<{ rows: M[], count: number }>
142
- // {
143
- // let query = this.model.find<M>(where);
144
- // if (!('dont' in pagination))
145
- // {
146
- // let { offset, limit } = this.database.paginate(pagination.page, pagination.size);
147
- // query = query.skip(offset);
148
- // query = query.limit(limit);
149
- // }
150
- // if (!('dont' in sorts))
151
- // {
152
- // let sort_options = this.database.getSortOptions(sorts);
153
- // query = query.sort(sort_options);
154
- // }
155
- // let rows = await query.exec();
156
- // let count = await this.model.countDocuments(where);
157
- // return { rows, count };
158
- // }
1
+ import { BaseClickhouseDatabase } from "./BaseClickhouseDatabase";
2
+ import { BaseTable } from "namirasoft-node";
3
+ import { BaseMetaColumn, BaseMetaTable } from "namirasoft-core";
4
+ import { AnySchema, ArraySchema, BaseTypeSchema, BoolSchema, DateTimeSchema, DoubleSchema, StringSchema, TypeSchema, VariableSchema } from "namirasoft-schema";
5
+ import { BaseClickhouseModelSchemaColumnOptions } from "./BaseClickhouseModelSchemaColumnOptions";
6
+ import { BaseClickhouseModelSchema } from "./BaseClickhouseModelSchema";
7
+
8
+ export abstract class BaseClickhouseTable<D extends BaseClickhouseDatabase> extends BaseTable<D, BaseClickhouseModelSchemaColumnOptions>
9
+ {
10
+ name!: string;
11
+ schema!: BaseClickhouseModelSchema;
12
+ constructor(database: D, name: string, schema: BaseClickhouseModelSchema)
13
+ {
14
+ super(database);
15
+ this.name = name;
16
+ this.schema = schema;
17
+ }
18
+ override getName(): string
19
+ {
20
+ return this.name;
21
+ }
22
+ override getSecureColumns(): string[]
23
+ {
24
+ let columns = super.getSecureColumns();
25
+ return ["_id", "__v", "deleted_at", "deletedAt", ...columns]
26
+ }
27
+ override getReadOnlyColumns(): string[]
28
+ {
29
+ let columns = super.getReadOnlyColumns();
30
+ return ["id", "created_at", "updated_at", "createdAt", "updatedAt", ...columns];
31
+ }
32
+ private getModelAllSchemas()
33
+ {
34
+ let otherAttributes: BaseClickhouseModelSchema = {
35
+ _id: { type: String, required: true },
36
+ __v: { type: String, required: true },
37
+ };
38
+ return { ... this.schema, ...otherAttributes };
39
+ }
40
+ public override getColumnOption(name: string)
41
+ {
42
+ let schema = this.getModelAllSchemas();
43
+ return schema[name] as BaseClickhouseModelSchemaColumnOptions;
44
+ }
45
+ public override forEachColumn(handler: (name: string, column: BaseClickhouseModelSchemaColumnOptions) => void)
46
+ {
47
+ let schema = this.getModelAllSchemas();
48
+ let keys = Object.keys(schema);
49
+ for (let i = 0; i < keys.length; i++)
50
+ handler(keys[i], this.getColumnOption(keys[i]));
51
+ }
52
+ public override getColumn(name: string): BaseMetaColumn
53
+ {
54
+ let option = this.getColumnOption(name);
55
+ let table_name = this.getName();
56
+ let table = new BaseMetaTable(null, table_name, table_name);
57
+ let type = option.type;
58
+ try
59
+ {
60
+ if (typeof (type) == "function")
61
+ type = type.name;
62
+ } catch (error)
63
+ {
64
+ }
65
+ let column = new BaseMetaColumn(table, name, name, type, option.required);
66
+ return column;
67
+ }
68
+ protected override getTypeSchema(option: BaseClickhouseModelSchemaColumnOptions): BaseTypeSchema
69
+ {
70
+ let required = option.required;
71
+ /* VariableType */
72
+ if (option.type === Boolean)
73
+ return new BoolSchema(required);
74
+ // else if (type instanceof Number)
75
+ // return new TinyIntSchema(required);
76
+ // else if (type instanceof DataTypes.SMALLINT)
77
+ // return new SmallIntSchema(required);
78
+ // else if (type instanceof DataTypes.MEDIUMINT)
79
+ // return new MediumIntSchema(required);
80
+ // else if (type instanceof DataTypes.INTEGER)
81
+ // return new IntegerSchema(required);
82
+ // else if (type instanceof DataTypes.BIGINT)
83
+ // return new BigIntSchema(required);
84
+ // else if (this.isFloat(type))
85
+ // return new FloatSchema(required, type.options.decimals);
86
+ else if (option.type === Number)
87
+ return new DoubleSchema(required, null);
88
+ // else if (this.isDecimal(type))
89
+ // return new DecimalSchema(required, type.options.scale);
90
+ // else if (this.isReal(type))
91
+ // return new RealSchema(required, type.options.decimals);
92
+ // else if (this.isChar(type))
93
+ // return new StringSchema(required, type.options.length, type.options.length);
94
+ else if (option.type === String)
95
+ return new StringSchema(required, null, null);
96
+ // else if (type instanceof DataTypes.TEXT)
97
+ // return new StringSchema(required, null, null);
98
+ else if (option.type === Date)
99
+ return new DateTimeSchema(required);
100
+ // else if (type instanceof DataTypes.DATEONLY)
101
+ // return new DateSchema(required);
102
+ // else if (type instanceof DataTypes.TIME)
103
+ // return new TimeSchema(required);
104
+ // else if (type instanceof DataTypes.DURATION)
105
+ // return new DurationSchema(required);
106
+ // else if (this.isEnum(type))
107
+ // {
108
+ // let name = NamingConvention.lower_case_underscore.convert(this.model.modelName + "_" + element.field, NamingConvention.Pascal_Case);
109
+ // return new EnumSchema(name, required, type.options.values);
110
+ // }
111
+ // else if (type instanceof DataTypes.JSON)
112
+ // return new AnySchema(required);
113
+ else if (option.type === Object)
114
+ {
115
+ let tags_type = option.tags?.type;
116
+ if (tags_type)
117
+ {
118
+ if (tags_type === "BaseTypeSchema")
119
+ return new TypeSchema(required);
120
+ if (tags_type === "BaseVariableSchema")
121
+ return new VariableSchema(required);
122
+ if (tags_type === "BaseTypeSchema[]")
123
+ return new ArraySchema(required, [new TypeSchema(required)]);
124
+ if (tags_type === "BaseVariableSchema[]")
125
+ return new ArraySchema(required, [new VariableSchema(required)]);
126
+ }
127
+ return new AnySchema(required);
128
+ }
129
+ throw new Error("Unsupported datatype for schema: " + option);
130
+ }
159
131
  }
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from "./BaseClickhouseDatabase";
2
- export * from "./BaseClickhouseModelSchema";
3
- export * from "./BaseClickhouseModelSchemaColumnOptions";
1
+ export * from "./BaseClickhouseDatabase";
2
+ export * from "./BaseClickhouseModelSchema";
3
+ export * from "./BaseClickhouseModelSchemaColumnOptions";
4
4
  export * from "./BaseClickhouseTable";