@algochad/prisma-core
Version:
A comprehensive NestJS library that provides EF-Core-like operations using Prisma and GraphQL. Features LINQ-style query builders, advanced data manipulation, GraphQL integration with genql, and a unified API for both Prisma and GraphQL operations. Includ
73 lines (72 loc) • 2.43 kB
TypeScript
import { DatabaseDialect } from './database-dialect';
import { ITableSchema } from './schema-inspector';
import { IPrismaQueryExpression } from './prisma-queryable';
export interface ISqlQueryResult {
sql: string;
parameters: any[];
estimatedCost?: number;
usedIndexes?: string[];
}
export interface IQueryPlanInfo {
operation: 'SELECT' | 'COUNT' | 'AGGREGATE';
tableScans: string[];
indexUsage: {
[tableName: string]: string[];
};
joinStrategy?: 'HASH' | 'NESTED_LOOP' | 'MERGE';
estimatedRows?: number;
}
export interface ISqlBuilderOptions {
enableQueryOptimization?: boolean;
enableIndexHints?: boolean;
maxParameterCount?: number;
useCompiledStatements?: boolean;
enableQueryPlan?: boolean;
}
export declare class AdvancedSqlQueryBuilder {
private dialect;
private schema;
private parameterIndex;
private parameterMap;
private options;
private usedTables;
private joinConditions;
private queryPlan;
constructor(dialect: DatabaseDialect, schema: ITableSchema, options?: ISqlBuilderOptions);
buildSelectQuery(expression: IPrismaQueryExpression): ISqlQueryResult;
buildCountQuery(expression: IPrismaQueryExpression): ISqlQueryResult;
buildAggregationQuery(expression: IPrismaQueryExpression, aggregationType: 'MIN' | 'MAX' | 'SUM' | 'AVG', columnName: string): ISqlQueryResult;
private buildWhereClause;
private buildCondition;
private buildFieldCondition;
private buildInCondition;
private buildStringOperation;
private buildFullTextSearch;
private buildArrayCondition;
private buildSelectClause;
private buildFromClause;
private buildJoinClauses;
private buildJoinClause;
private buildOrderByClause;
private buildLimitClause;
private getParameterPlaceholder;
private quoteIdentifier;
private normalizeValue;
private reset;
private buildLogicalOperator;
private buildGroupByClause;
private buildHavingClause;
private getOptimalCountField;
private validateAggregationColumn;
private optimizeQuery;
private optimizeCountQuery;
private optimizeAggregationQuery;
private addIndexHints;
private analyzeWhereForIndexUsage;
private calculateQueryCost;
private getUsedIndexes;
private getArrayType;
private buildArrayElementCondition;
private buildJsonArraySome;
private buildEmptyCheck;
}