(
reset?: boolean | (keyof QBState<Entity>)[],
preserve?: (keyof QBState<Entity>)[],
)
| 2897 | } |
| 2898 | |
| 2899 | clone( |
| 2900 | reset?: boolean | (keyof QBState<Entity>)[], |
| 2901 | preserve?: (keyof QBState<Entity>)[], |
| 2902 | ): QueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields, CTEs> { |
| 2903 | const qb = new QueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields, CTEs>( |
| 2904 | this.#state.mainAlias!.entityName, |
| 2905 | this.metadata, |
| 2906 | this.driver, |
| 2907 | this.context, |
| 2908 | this.#state.mainAlias!.aliasName, |
| 2909 | this.connectionType, |
| 2910 | this.em, |
| 2911 | ); |
| 2912 | |
| 2913 | if (reset !== true) { |
| 2914 | qb.#state = Utils.copy(this.#state); |
| 2915 | // CTEs contain NativeQueryBuilder instances that should not be deep-cloned |
| 2916 | qb.#state.ctes = this.#state.ctes.map(cte => ({ ...cte })); |
| 2917 | |
| 2918 | if (Array.isArray(reset)) { |
| 2919 | const fresh = QueryBuilder.createDefaultState<Entity>(); |
| 2920 | for (const key of reset) { |
| 2921 | (qb.#state as any)[key] = (fresh as any)[key]; |
| 2922 | } |
| 2923 | } |
| 2924 | } else if (preserve) { |
| 2925 | for (const key of preserve) { |
| 2926 | (qb.#state as any)[key] = Utils.copy((this.#state as any)[key]); |
| 2927 | } |
| 2928 | } |
| 2929 | |
| 2930 | qb.#state.finalized = false; |
| 2931 | qb.#query = undefined; |
| 2932 | qb.#helper = qb.createQueryBuilderHelper(); |
| 2933 | qb.#abortOptions = this.#abortOptions; |
| 2934 | |
| 2935 | return qb; |
| 2936 | } |
| 2937 | |
| 2938 | /** |
| 2939 | * Sets logger context for this query builder. |
no test coverage detected