- sql = "SELECT nodes.*, node_nodenetworks.nodenetwork_id"
-
- # For compatibility and convenience, support returning primary
- # interface values directly in the Node structure.
- extra_nodenetwork_fields = set(extra_fields).intersection(Node.primary_nodenetwork_fields)
-
- # N.B.: Joined IDs may be marked as deleted in their primary tables
- join_tables = {
- # extra_field: (extra_table, extra_column, join_using)
- 'nodegroup_ids': ('nodegroup_nodes', 'nodegroup_id', 'node_id'),
- 'conf_file_ids': ('conf_assoc', 'conf_file_id', 'node_id'),
- 'root_person_ids': ('node_root_access', 'person_id AS root_person_id', 'node_id'),
- 'slice_ids': ('dslice03_slicenode', 'slice_id', 'node_id'),
- 'pcu_ids': ('pcu_ports', 'pcu_id', 'node_id'),
- }
-
- extra_fields = filter(join_tables.has_key, extra_fields)
- extra_tables = ["%s USING (%s)" % \
- (join_tables[field][0], join_tables[field][2]) \
- for field in extra_fields]
- extra_columns = ["%s.%s" % \
- (join_tables[field][0], join_tables[field][1]) \
- for field in extra_fields]
-
- if extra_columns:
- sql += ", " + ", ".join(extra_columns)
-
- sql += " FROM nodes" \
- " LEFT JOIN node_nodenetworks USING (node_id)"
-
- if extra_tables:
- sql += " LEFT JOIN " + " LEFT JOIN ".join(extra_tables)
-
- sql += " WHERE deleted IS False"