Example #1
0
    def attrs(self, four_part_name):
        """ """
        fpn = ccm_utils.parse_fpn(four_part_name, self.delim())

        # attributes from attrib-table
        query = \
"""
SELECT attrib.name, attrib.textval
FROM   compver INNER JOIN attrib ON (compver.id = attrib.is_attr_of)
WHERE  compver.name = ? AND
       compver.version = ? AND
       compver.cvtype = ? AND
       compver.subsystem = ?;
"""
        args = (fpn['name'], fpn['version'], fpn['type'], fpn['instance'])
        cursor = self._db_connection.cursor()
        cursor.execute(query, args)
        attrib_attrs = {
            row[0]: ccm_utils.type_from_text(row[1])
            for row in cursor.fetchall()
        }

        # attributes from compver-table
        compver_attrs = _COMPVER_ATTR_NAMES.copy()

        attrs = {}
        attrs.update(attrib_attrs)
        attrs.update(compver_attrs)
        return attrs
 def object_by_fpn(self, four_part_name):
     fpn = four_part_name if isinstance(four_part_name,
                                        dict) else ccm_utils.parse_fpn(
                                            four_part_name, self.delim)
     sql_query = \
         "SELECT cv.id, cv.cvtype " + \
         "FROM compver cv " + \
         "WHERE cv.name = ? AND cv.version = ? AND cv.cvtype = ? and cv.subsystem = ?"
     rows = self._db.query_sql(sql_query, fpn['name'], fpn['version'],
                               fpn['type'], fpn['instance'])
     if not rows:
         return None
     row = rows[0]
     cv_id = row[0]
     cv_type = row[1]
     return self._construct_object(cv_id, cv_type)
Example #3
0
    def contents_dir(self, four_part_name):
        fpn = ccm_utils.parse_fpn(four_part_name, self.delim())
        if fpn['type'] != 'dir':
            raise CcmError('Object is not a directory')

        sql_query = \
            ("SELECT bsite.info " + \
             "FROM bsite " + \
             "WHERE bsite.is_bsite_of = (" + \
             "  SELECT compver.id " + \
             "  FROM compver " + \
             "  WHERE compver.name = '{name}' AND compver.version = '{version}' AND compver.cvtype = '{type}' AND compver.subsystem = '{instance}' " + \
             ") AND bsite.info NOT LIKE '%/dir/%' " + \
             "ORDER BY bsite.info").format(**fpn)

        cursor = self._db_connection.cursor()
        cursor.execute(sql_query)
        return [row[0] for row in cursor.fetchall()]
Example #4
0
    def finduse_task(self, four_part_name):
        fpn = ccm_utils.parse_fpn(four_part_name, self.delim())
        names = ['objectname', 'status']

        # find all task_in_baseline ?
        # find all task_in_folder ?  XXX TODO: is this correct?
        sql_query = \
            ("SELECT cv2.name || '" + self.delim() + "' || cv2.version || ':' || cv2.cvtype || ':' || cv2.subsystem AS objectname, ccm_status(a1.textval) AS status " + \
             "FROM compver cv1 INNER JOIN relate r1 ON (cv1.id = r1.to_cv) INNER JOIN relate r2 ON (r1.from_cv = r2.to_cv) INNER JOIN compver cv2 ON (r2.from_cv = cv2.id) LEFT JOIN attrib a1 ON (cv2.id = a1.is_attr_of) " + \
             "WHERE cv1.name = '{name}' AND cv1.version = '{version}' AND cv1.cvtype = '{type}' AND cv1.subsystem = '{instance}' AND " + \
                  "r1.name = 'task_in_folder' AND " + \
                  "r2.name = 'folder_in_rp' AND "+ \
                  "a1.name = 'status_log'").format(**fpn)
        # find all dirty_task_in_baseline ?

        cursor = self._db_connection.cursor()
        cursor.execute(sql_query)
        return [dict(zip(names, row)) for row in cursor.fetchall()]
Example #5
0
    def attr(self, four_part_name, attr_name):
        """ """
        # attributes from attrib-table
        fpn = ccm_utils.parse_fpn(four_part_name, self.delim())
        query = \
"""
SELECT attrib.textval
FROM   compver INNER JOIN attrib ON (compver.id = attrib.is_attr_of)
WHERE  compver.name = ? AND
       compver.version = ? AND
       compver.cvtype = ? AND
       compver.subsystem = ? AND
       attrib.name = ?;
"""
        args = (fpn['name'], fpn['version'], fpn['type'], fpn['instance'],
                attr_name)
        cursor = self._db_connection.cursor()
        cursor.execute(query, args)
        result = cursor.fetchone()
        if result:
            return ccm_utils.deserialize_textval(result[0])

        # attributes from compver-table
        query = "SELECT " + ", ".join(_COMPVER_ATTR_NAMES.keys()) + \
"""
FROM   compver
WHERE  compver.name = ? AND
       compver.version = ? AND
       compver.cvtype = ? AND
       compver.subsystem = ?;
"""
        args = (fpn['name'], fpn['version'], fpn['type'], fpn['instance'])
        cursor = self._db_connection.cursor()
        cursor.execute(query, args)
        result = cursor.fetchone()
        if result:
            compver_attrs = dict(zip(_COMPVER_ATTR_NAMES.keys(), result))
            return compver_attrs.get(attr_name)

        return None
Example #6
0
    def visit_function_call(self, node, visited_nodes):
        function = node.children[0].text.rstrip()
        args = [
            n.text.rstrip()[1:-1]
            for n in descendants_with_expr_name(node, 'string')
        ]

        if function == 'is_successor_of':
            fpn = ccm_utils.parse_fpn(args[0], self._delim)
            self.sql_query += ("cv.id = (" + \
                "SELECT relate.to_cv " + \
                "FROM compver INNER JOIN relate ON (compver.id = relate.from_cv) " + \
                "WHERE compver.name = '{name}' AND compver.version = '{version}' AND compver.cvtype = '{type}' AND compver.subsystem = '{instance}' AND " + \
                      "relate.name = 'successor'" + \
                ")").format(**fpn)
        elif function == 'is_predecessor_of':
            fpn = ccm_utils.parse_fpn(args[0], self._delim)
            self.sql_query += ("cv.id = (" + \
                "SELECT relate.from_cv " + \
                "FROM compver INNER JOIN relate ON (compver.id = relate.to_cv) " + \
                "WHERE compver.name = '{name}' AND compver.version = '{version}' AND compver.cvtype = '{type}' AND compver.subsystem = '{instance}' AND " + \
                      "relate.name = 'successor'" + \
                ")").format(**fpn)
        elif function == 'is_child_of':
            fpn = ccm_utils.parse_fpn(args[0], self._delim)
            project_fpn = ccm_utils.parse_fpn(args[1], self._delim)
            self.sql_query += ("cv.id IN (" + \
                "SELECT bind.has_child " + \
                "FROM bind INNER JOIN compver cv1 ON (bind.has_asm = cv1.id) INNER JOIN compver cv2 on (bind.has_parent = cv2.id) " + \
                "WHERE cv1.name = '{0[name]}' AND cv1.version = '{0[version]}' AND cv1.cvtype = '{0[type]}' AND cv1.subsystem = '{0[instance]}' AND " + \
                      "cv2.name = '{1[name]}' AND cv2.version = '{1[version]}' AND cv2.cvtype = '{1[type]}' AND cv2.subsystem = '{1[instance]}'" + \
                ")").format(project_fpn, fpn)
        elif function == 'is_member_of':
            fpn = ccm_utils.parse_fpn(args[0], self._delim)
            self.sql_query += ("cv.id IN (" + \
                "SELECT cv2.id " + \
                "FROM compver cv1 INNER JOIN bind ON (cv1.id = bind.has_asm) INNER JOIN compver cv2 ON (bind.has_child = cv2.id) " + \
                "WHERE cv1.name = '{name}' AND cv1.version = '{version}' AND cv1.cvtype = '{type}' AND cv1.subsystem = '{instance}'" + \
                ")").format(**fpn)
        elif function == 'has_member':
            fpn = ccm_utils.parse_fpn(args[0], self._delim)
            self.sql_query += ("cv.id IN (" + \
                "SELECT cv1.id " + \
                "FROM bind INNER JOIN compver cv1 ON (bind.has_asm = cv1.id) INNER JOIN compver cv2 ON (bind.has_child = cv2.id) " + \
                "WHERE cv2.name = '{name}' AND cv2.version = '{version}' AND cv2.cvtype = '{type}' AND cv2.subsystem = '{instance}'" + \
                ")").format(**fpn)
        elif function == 'is_baseline_project_of':
            fpn = ccm_utils.parse_fpn(args[0], self._delim)
            self.sql_query += ("cv.id = (" + \
                "SELECT relate.to_cv " + \
                "FROM compver INNER JOIN relate ON (compver.id = relate.from_cv) " + \
                "WHERE compver.name = '{name}' AND compver.version = '{version}' AND compver.cvtype = '{type}' AND compver.subsystem = '{instance}' AND " + \
                      "relate.name = 'baseline_project'" + \
                ")").format(**fpn)
        elif function == 'has_baseline_project':
            fpn = ccm_utils.parse_fpn(args[0], self._delim)
            self.sql_query += ("cv.id IN (" + \
                "SELECT relate.from_cv " + \
                "FROM relate INNER JOIN compver ON (relate.to_cv = compver.id) " + \
                "WHERE compver.name = '{name}' AND compver.version = '{version}' AND compver.cvtype = '{type}' AND compver.subsystem = '{instance}' AND " + \
                      "relate.name = 'baseline_project'"
                ")").format(**fpn)
        else:
            raise NotImplementedError()

        return node