MCPcopy Create free account
hub / github.com/mikro-orm/mikro-orm / clone

Method clone

packages/sql/src/query/QueryBuilder.ts:2899–2936  ·  view source on GitHub ↗
(
    reset?: boolean | (keyof QBState<Entity>)[],
    preserve?: (keyof QBState<Entity>)[],
  )

Source from the content-addressed store, hash-verified

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.

Callers 5

getCountMethod · 0.95
getResultAndCountMethod · 0.95
buildUnionQueryMethod · 0.95
wrapPaginateSubQueryMethod · 0.95
wrapModifySubQueryMethod · 0.95

Calls 4

copyMethod · 0.80
createDefaultStateMethod · 0.80
mapMethod · 0.45

Tested by

no test coverage detected