/// <summary>
        /// Gets the <see cref="TableSchema"/> for the specified entityType and dialect.
        /// </summary>
        public static TableSchema GetTableSchema(Type entityType, IDialect dialect, TableSchemaFactory schemaFactory)
        {
            var key = new TableSchemaCacheIdentity(entityType, dialect.Name);

            if (Schemas.TryGetValue(key, out var result))
            {
                return(result);
            }

            var schema = schemaFactory.MakeTableSchema(entityType, dialect);

            Schemas[key] = schema;
            return(schema);
        }
        /// <summary>
        /// Gets the <see cref="ConditionColumnSchema"/>s for the specified conditionsType and dialect.
        /// </summary>
        public static ImmutableArray <ConditionColumnSchema> GetConditionsSchema(
            Type entityType,
            TableSchema tableSchema,
            Type conditionsType,
            IDialect dialect,
            TableSchemaFactory schemaFactory)
        {
            var key = new ConditionsColumnCacheIdentity(conditionsType, entityType, dialect.Name);

            if (ConditionColumns.TryGetValue(key, out var result))
            {
                return(result);
            }

            var column = schemaFactory.MakeConditionsSchema(conditionsType, tableSchema);

            ConditionColumns[key] = column;
            return(column);
        }