constructInsertSQL method
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;
}