buildWithClause method

  1. @protected
String buildWithClause()
inherited

Implementation

@protected
String buildWithClause() {
  if (_ctes.isEmpty) return '';

  int currentHashCode = _calculateCteHashCode();

  if (_config.enableCaching && !_cache.needsUpdate(currentHashCode)) {
    return _cache.cachedWithClause ?? '';
  }

  validateAllCtes();

  List<String> cteStrings = [];
  bool hasRecursive = _ctes.any((cte) => cte.isRecursive);

  _escapingStrategy = StandardEscapingStrategy(_config.quoteChar);

  for (var cte in _ctes) {
    cteStrings.add(cte.toSql(_escapingStrategy, _config));
  }

  String withClause = hasRecursive ? 'WITH RECURSIVE ' : 'WITH ';
  withClause += cteStrings.join(', ');

  if (_config.enableCaching) {
    Map<String, dynamic> bindings = _calculateCteBindings();
    _cache.updateCache(withClause, bindings, currentHashCode);
  }

  return withClause;
}