All files / src/utils query-context.tsx

50% Statements 14/28
25% Branches 3/12
42.86% Functions 3/7
50% Lines 14/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87                                    2x                   2x           2x 1x 1x     2x                           2x 1x 1x     2x                         2x 1x 1x     2x                    
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
import { deepDelete, deepSet } from './object-change';
 
export interface QueryContext {
  useCache?: boolean | undefined;
  populateCache?: boolean | undefined;
  useApproximateCountDistinct?: boolean | undefined;
  useApproximateTopN?: boolean | undefined;
  [key: string]: any;
}
 
export function isEmptyContext(context: QueryContext): boolean {
  return Object.keys(context).length === 0;
}
 
// -----------------------------
 
export function getUseCache(context: QueryContext): boolean {
  const { useCache } = context;
  return typeof useCache === 'boolean' ? useCache : true;
}
 
export function setUseCache(context: QueryContext, useCache: boolean): QueryContext {
  let newContext = context;
  if (useCache) {
    newContext = deepDelete(newContext, 'useCache');
    newContext = deepDelete(newContext, 'populateCache');
  } else {
    newContext = deepSet(newContext, 'useCache', false);
    newContext = deepSet(newContext, 'populateCache', false);
  }
  return newContext;
}
 
// -----------------------------
 
export function getUseApproximateCountDistinct(context: QueryContext): boolean {
  const { useApproximateCountDistinct } = context;
  return typeof useApproximateCountDistinct === 'boolean' ? useApproximateCountDistinct : true;
}
 
export function setUseApproximateCountDistinct(
  context: QueryContext,
  useApproximateCountDistinct: boolean,
): QueryContext {
  if (useApproximateCountDistinct) {
    return deepDelete(context, 'useApproximateCountDistinct');
  } else {
    return deepSet(context, 'useApproximateCountDistinct', false);
  }
}
 
// -----------------------------
 
export function getUseApproximateTopN(context: QueryContext): boolean {
  const { useApproximateTopN } = context;
  return typeof useApproximateTopN === 'boolean' ? useApproximateTopN : true;
}
 
export function setUseApproximateTopN(
  context: QueryContext,
  useApproximateTopN: boolean,
): QueryContext {
  if (useApproximateTopN) {
    return deepDelete(context, 'useApproximateTopN');
  } else {
    return deepSet(context, 'useApproximateTopN', false);
  }
}