Ejemplo n.º 1
0
    def find(query, components):
        conn = DB.getConn()
        c = conn.cursor()
        
        c.execute(query, components)
        commitrows = c.fetchall()
        commitfiles = []

        if commitrows:
                allcommitids = ",".join([str(int(commit[0])) for commit in commitrows])

                #This is poor practice, but we assured ourselves the value is composed only of ints first
                DB.execute(c, "SELECT * from " + DB.commitfile._table + " WHERE commitid IN (" + allcommitids + ")")
                commitfiles = c.fetchall()

                DB.execute(c, "SELECT * from " + DB.commitkeyword._table + " WHERE commitid IN (" + allcommitids + ")")
                commitkeywords = c.fetchall()
                
                DB.execute(c, "SELECT commitid, case when length(data) < 307200 then data else 'TOOLARGE' end as data from " + DB.commitdiffs._table + " WHERE commitid IN (" + allcommitids + ")")
                commitdata = c.fetchall()
                

        commits = []
        for i in commitrows:
                r = Repo()
                r.loadFromValues(i[DB.commit._numColumns + DB.repo.id], i[DB.commit._numColumns + DB.repo.name], i[DB.commit._numColumns + DB.repo.repotypeid], i[DB.commit._numColumns + DB.repo.url],
                        i[DB.commit._numColumns + DB.repo.viewlink], i[DB.commit._numColumns + DB.repo.tagname], i[DB.commit._numColumns + DB.repo.tagmaturity])

                files = [file[DB.commitfile.file] for file in commitfiles
                        if file[DB.commitfile.commitid] == i[DB.commit.id]]
                keywords = [keyword[DB.commitkeyword.keyword] for keyword in commitkeywords
                            if keyword[DB.commitkeyword.commitid] == i[DB.commit.id]]
                data = [cdata[DB.commitdiffs.data] for cdata in commitdata
                            if cdata[DB.commitdiffs.commitid] == i[DB.commit.id]][0]

                if i[DB.commit._numColumns + DB.repo.repotypeid] == Repo.Type.GIT:
                    c = GitCommit()
                elif i[DB.commit._numColumns + DB.repo.repotypeid] == Repo.Type.SVN:
                    c = SVNCommit()
                else:
                    c = Commit()
                c.loadFromDatabase(r, i, files, keywords, data)

                commits.append(c)

        return commits
Ejemplo n.º 2
0
    def find(query, components):
        conn = DB.getConn()
        c = conn.cursor()

        c.execute(query, components)
        commitrows = c.fetchall()
        commitfiles = []

        if commitrows:
            allcommitids = ",".join(
                [str(int(commit[0])) for commit in commitrows])

            #This is poor practice, but we assured ourselves the value is composed only of ints first
            DB.execute(
                c, "SELECT * from " + DB.commitfile._table +
                " WHERE commitid IN (" + allcommitids + ")")
            commitfiles = c.fetchall()

            DB.execute(
                c, "SELECT * from " + DB.commitkeyword._table +
                " WHERE commitid IN (" + allcommitids + ")")
            commitkeywords = c.fetchall()

            DB.execute(
                c,
                "SELECT commitid, case when length(data) < 307200 then data else 'TOOLARGE' end as data from "
                + DB.commitdiffs._table + " WHERE commitid IN (" +
                allcommitids + ")")
            commitdata = c.fetchall()

        commits = []
        for i in commitrows:
            r = Repo()
            r.loadFromValues(i[DB.commit._numColumns + DB.repo.id],
                             i[DB.commit._numColumns + DB.repo.name],
                             i[DB.commit._numColumns + DB.repo.repotypeid],
                             i[DB.commit._numColumns + DB.repo.url],
                             i[DB.commit._numColumns + DB.repo.viewlink],
                             i[DB.commit._numColumns + DB.repo.tagname],
                             i[DB.commit._numColumns + DB.repo.tagmaturity])

            files = [
                file[DB.commitfile.file] for file in commitfiles
                if file[DB.commitfile.commitid] == i[DB.commit.id]
            ]
            keywords = [
                keyword[DB.commitkeyword.keyword] for keyword in commitkeywords
                if keyword[DB.commitkeyword.commitid] == i[DB.commit.id]
            ]
            data = [
                cdata[DB.commitdiffs.data] for cdata in commitdata
                if cdata[DB.commitdiffs.commitid] == i[DB.commit.id]
            ][0]

            if i[DB.commit._numColumns + DB.repo.repotypeid] == Repo.Type.GIT:
                c = GitCommit()
            elif i[DB.commit._numColumns +
                   DB.repo.repotypeid] == Repo.Type.SVN:
                c = SVNCommit()
            else:
                c = Commit()
            c.loadFromDatabase(r, i, files, keywords, data)

            commits.append(c)

        return commits