constructInsertSQL method

String constructInsertSQL(
  1. TCustomSQLQuery query,
  2. TBoolRef returningClause
)

Implementation

String constructInsertSQL(TCustomSQLQuery query, TBoolRef returningClause) {
  var sqlFields = '';
  var sqlValues = '';
  var returningFields = '';
  for (var x = 0; x < query.fields.count; x++) {
    final f = query.fields[x];
    // @@@ lookup/calc columns are not physical fields, and must never go into an INSERT.
    if (f.fieldKind == TFieldKind.fkCalculated ||
        f.fieldKind == TFieldKind.fkLookup) {
      continue;
    }
    if (!f.isNull &&
        f.providerFlags.contains(TProviderFlag.pfInUpdate) &&
        !f.readOnly) {
      sqlFields =
          '$sqlFields${fieldNameQuoteChars[0]}${f.fieldName}${fieldNameQuoteChars[1]},';
      sqlValues = '$sqlValues:"${f.fieldName}",';
    }
    if (returningClause.value &&
        f.providerFlags.contains(TProviderFlag.pfRefreshOnInsert)) {
      returningFields =
          '$returningFields${fieldNameQuoteChars[0]}${f.fieldName}${fieldNameQuoteChars[1]},';
    }
  }
  if (sqlFields.isEmpty) {
    databaseErrorFmt(SNoUpdateFields, ['insert'], this);
  }
  sqlFields = sqlFields.substring(0, sqlFields.length - 1);
  sqlValues = sqlValues.substring(0, sqlValues.length - 1);
  var result =
      'insert into ${query._tableName} ($sqlFields) values ($sqlValues)';
  if (returningClause.value) {
    returningClause.value = returningFields.isNotEmpty;
    if (returningClause.value) {
      returningFields =
          returningFields.substring(0, returningFields.length - 1);
      result = '$result returning $returningFields';
    }
  }
  return result;
}