generateSelectRelationshipSQL method
FutureOr<SQL>
generateSelectRelationshipSQL(
- Transaction transaction,
- String entityName,
- String table,
- String field,
- dynamic id,
- String otherTableName,
Implementation
FutureOr<SQL> generateSelectRelationshipSQL(
Transaction transaction,
String entityName,
String table,
String field,
dynamic id,
String otherTableName,
) {
var retTableScheme = getTableScheme(table);
return retTableScheme.resolveMapped((tableScheme) {
if (tableScheme == null) {
var errorMsg = "Can't find `TableScheme` for table: $table";
_log.severe(errorMsg);
throw StateError(errorMsg);
}
var relationship = tableScheme.getTableRelationshipReference(
sourceTable: table,
sourceField: field,
targetTable: otherTableName,
);
if (relationship == null) {
throw StateError(
"Can't find TableRelationshipReference for tables: $table -> $otherTableName",
);
}
var parameters = {'source_id': id};
var q = dialect.elementQuote;
var conditionSQL =
'$q${relationship.sourceRelationshipField}$q = @source_id';
var sql = StringBuffer();
sql.write('SELECT $q');
sql.write(relationship.sourceRelationshipField);
sql.write('$q as ${q}source_id$q , $q');
sql.write(relationship.targetRelationshipField);
sql.write('$q as ${q}target_id$q FROM $q');
sql.write(relationship.relationshipTable);
sql.write('$q WHERE ( ');
sql.write(conditionSQL);
sql.write(' )');
var condition = KeyConditionEQ([
ConditionKeyField(relationship.sourceRelationshipField),
], id);
return SQL(
sql.toString(),
null,
parameters,
parameters,
condition: condition,
sqlCondition: conditionSQL,
returnColumnsAliases: {
relationship.sourceRelationshipField: 'source_id',
relationship.targetRelationshipField: 'target_id',
},
mainTable: relationship.relationshipTable,
relationship: relationship,
);
});
}