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);
});
}