You are here

function relation_instance_selectables_query in Subform 5

1 call to relation_instance_selectables_query()
_subform_select in ./subform.module

File

./relation_class.module, line 389
CRUD, and manage relation_classes and relation_class lists

Code

function relation_instance_selectables_query($relation_class, $child_side, $parent_node) {
  $relation_class_node = node_load($relation_class);
  $child_side_node = $child_side . "_node";
  $child_side_node_type = $child_side . "_node_type";
  $child_side_node_type = $relation_class_node->{$child_side_node_type};
  $child_side_cardinality = $child_side . "_node_cardinality";
  $child_side_cardinality = $relation_class_node->{$child_side_cardinality};
  $parent_side = $child_side == "left" ? "right" : "left";
  $parent_side_node = $parent_side . "_node";
  $duplicate_relation_cost = $relation_class_node->unique_instances ? $child_side_cardinality : 1;
  $sql = "\nSELECT\n  nid, SUM(related) as related_count\nFROM\n(\n  SELECT\n    nid, IF(relation_class IS NULL, 0, IF({$parent_side_node} <= 0, IF({$parent_side_node} = {$parent_node}, {$duplicate_relation_cost}, 0), IF({$parent_side_node} = {$parent_node}, {$duplicate_relation_cost}, 1))) as related\n  FROM\n    node\n      LEFT JOIN\n    relation_instance ON node.nid = relation_instance.{$child_side_node}\n  WHERE\n    node.type = '{$child_side_node_type}'\n      AND\n    (\n      relation_class IS NULL\n        OR\n      relation_class = {$relation_class}\n    )\n) as possibilities\nGROUP BY\n  nid\nHAVING\n  related_count < {$child_side_cardinality}\n  ";

  // drupal_set_message( $sql );
  return $sql;
}