view.d.ts 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import type { BuildColumns } from "../column-builder.js";
  2. import { entityKind } from "../entity.js";
  3. import type { TypedQueryBuilder } from "../query-builders/query-builder.js";
  4. import type { AddAliasToSelection } from "../query-builders/select.types.js";
  5. import type { ColumnsSelection, SQL } from "../sql/sql.js";
  6. import type { MySqlColumnBuilderBase } from "./columns/index.js";
  7. import { QueryBuilder } from "./query-builders/query-builder.js";
  8. import { MySqlViewBase } from "./view-base.js";
  9. import { MySqlViewConfig } from "./view-common.js";
  10. export interface ViewBuilderConfig {
  11. algorithm?: 'undefined' | 'merge' | 'temptable';
  12. sqlSecurity?: 'definer' | 'invoker';
  13. withCheckOption?: 'cascaded' | 'local';
  14. }
  15. export declare class ViewBuilderCore<TConfig extends {
  16. name: string;
  17. columns?: unknown;
  18. }> {
  19. protected name: TConfig['name'];
  20. protected schema: string | undefined;
  21. static readonly [entityKind]: string;
  22. readonly _: {
  23. readonly name: TConfig['name'];
  24. readonly columns: TConfig['columns'];
  25. };
  26. constructor(name: TConfig['name'], schema: string | undefined);
  27. protected config: ViewBuilderConfig;
  28. algorithm(algorithm: Exclude<ViewBuilderConfig['algorithm'], undefined>): this;
  29. sqlSecurity(sqlSecurity: Exclude<ViewBuilderConfig['sqlSecurity'], undefined>): this;
  30. withCheckOption(withCheckOption?: Exclude<ViewBuilderConfig['withCheckOption'], undefined>): this;
  31. }
  32. export declare class ViewBuilder<TName extends string = string> extends ViewBuilderCore<{
  33. name: TName;
  34. }> {
  35. static readonly [entityKind]: string;
  36. as<TSelectedFields extends ColumnsSelection>(qb: TypedQueryBuilder<TSelectedFields> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelectedFields>)): MySqlViewWithSelection<TName, false, AddAliasToSelection<TSelectedFields, TName, 'mysql'>>;
  37. }
  38. export declare class ManualViewBuilder<TName extends string = string, TColumns extends Record<string, MySqlColumnBuilderBase> = Record<string, MySqlColumnBuilderBase>> extends ViewBuilderCore<{
  39. name: TName;
  40. columns: TColumns;
  41. }> {
  42. static readonly [entityKind]: string;
  43. private columns;
  44. constructor(name: TName, columns: TColumns, schema: string | undefined);
  45. existing(): MySqlViewWithSelection<TName, true, BuildColumns<TName, TColumns, 'mysql'>>;
  46. as(query: SQL): MySqlViewWithSelection<TName, false, BuildColumns<TName, TColumns, 'mysql'>>;
  47. }
  48. export declare class MySqlView<TName extends string = string, TExisting extends boolean = boolean, TSelectedFields extends ColumnsSelection = ColumnsSelection> extends MySqlViewBase<TName, TExisting, TSelectedFields> {
  49. static readonly [entityKind]: string;
  50. protected $MySqlViewBrand: 'MySqlView';
  51. [MySqlViewConfig]: ViewBuilderConfig | undefined;
  52. constructor({ mysqlConfig, config }: {
  53. mysqlConfig: ViewBuilderConfig | undefined;
  54. config: {
  55. name: TName;
  56. schema: string | undefined;
  57. selectedFields: ColumnsSelection;
  58. query: SQL | undefined;
  59. };
  60. });
  61. }
  62. export type MySqlViewWithSelection<TName extends string, TExisting extends boolean, TSelectedFields extends ColumnsSelection> = MySqlView<TName, TExisting, TSelectedFields> & TSelectedFields;
  63. export declare function mysqlView<TName extends string>(name: TName): ViewBuilder<TName>;
  64. export declare function mysqlView<TName extends string, TColumns extends Record<string, MySqlColumnBuilderBase>>(name: TName, columns: TColumns): ManualViewBuilder<TName, TColumns>;