Пример #1
0
def descendant_relationships(codes):
    codes = list(codes)
    placeholders = ", ".join(["%s"] * len(codes))
    sql = f"""
    WITH RECURSIVE tree(parent_id, child_id) AS (
      SELECT
        destination_id AS parent_id,
        source_id AS child_id
      FROM snomedct_relationship
      WHERE parent_id IN ({placeholders})
        AND type_id = '{IS_A}'
        AND active

      UNION

      SELECT
        r.destination_id AS parent_id,
        r.source_id AS child_id
      FROM snomedct_relationship r
      INNER JOIN tree t
        ON r.destination_id = t.child_id
      WHERE r.type_id = '{IS_A}'
        AND active
    )

    SELECT parent_id, child_id FROM tree
    """

    return query(sql, codes)
Пример #2
0
 def test_query_with_many_params(self):
     values = list(range(5000))
     placeholders = ["%s"] * len(values)
     sql = "SELECT 'found' WHERE %s IN ({})".format(", ".join(placeholders))
     last_value = values[-1]
     params = [last_value] + values
     result = db_utils.query(sql, params)
     self.assertEqual(result, [("found", )])
Пример #3
0
def descendant_relationships(codes):
    placeholders = ", ".join(["%s"] * len(codes))
    sql = f"""
    WITH RECURSIVE tree(parent_id, child_id) AS (
      SELECT parent_id, child_id
      FROM ctv3_concepthierarchy
      WHERE parent_id IN ({placeholders})

      UNION

      SELECT h.parent_id, h.child_id
      FROM ctv3_concepthierarchy h
      INNER JOIN tree t
        ON h.parent_id = t.child_id
    )

    SELECT parent_id, child_id FROM tree
    """

    return query(sql, codes)
Пример #4
0
def descendant_relationships(codes):
    codes = list(codes)
    concept_table = Concept._meta.db_table
    placeholders = ", ".join(["%s"] * len(codes))
    sql = f"""
    WITH RECURSIVE tree(parent_code, child_code) AS (
      SELECT parent_id AS parent_code, code AS child_code
      FROM {concept_table}
      WHERE parent_code IN ({placeholders})

      UNION

      SELECT c.parent_id AS parent_code, c.code AS child_code
      FROM {concept_table} c
      INNER JOIN tree t
        ON c.parent_id = t.child_code
    )

    SELECT parent_code, child_code FROM tree
    """

    return query(sql, codes)
def descendant_relationships(codes):
    codes = list(codes)
    relationship_table = TPPRelationship._meta.db_table
    placeholders = ", ".join(["%s"] * len(codes))
    sql = f"""
    WITH RECURSIVE tree(ancestor_id, descendant_id) AS (
      SELECT ancestor_id, descendant_id
      FROM {relationship_table}
      WHERE ancestor_id IN ({placeholders}) AND distance = 1

      UNION

      SELECT r.ancestor_id, r.descendant_id
      FROM {relationship_table} r
      INNER JOIN tree t
        ON r.ancestor_id = t.descendant_id
      WHERE distance = 1
    )

    SELECT ancestor_id, descendant_id FROM tree
    """

    return query(sql, codes)