-
Notifications
You must be signed in to change notification settings - Fork 0
/
vgsgsql.cpp
119 lines (102 loc) · 3.03 KB
/
vgsgsql.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
* Copyright (C) 2015 by Glenn Hickey (hickey@soe.ucsc.edu)
*
* Released under the MIT license, see LICENSE.txt
*/
#include "md5.h"
#include "vgsgsql.h"
using namespace std;
using namespace vg;
VGSGSQL::VGSGSQL() : SGSQL(), _pm(0)
{
}
VGSGSQL::~VGSGSQL()
{
}
void VGSGSQL::exportGraph(const PathMapper* pm,
const string& sqlInsertPath,
const string& fastaPath, const string& vgPath)
{
_pm = pm;
_halPath = vgPath;
writeDb(pm->getSideGraph(), sqlInsertPath, fastaPath);
}
void VGSGSQL::getSequenceString(const SGSequence* seq,
string& outString) const
{
outString = _pm->getSideGraphDNA(seq->getID());
}
string VGSGSQL::getOriginName(const SGSequence* seq) const
{
return _pm->getVGPathName(seq);
}
string VGSGSQL::getPrimaryOriginName() const
{
return _pm->getPathName(0);
}
string VGSGSQL::getDescription() const
{
return string("vg2sg ") + _halPath;
}
/*
CREATE TABLE VariantSet (ID INTEGER PRIMARY KEY,
referenceSetID INTEGER NOT NULL REFERENCES ReferenceSet(ID),
name TEXT);
CREATE TABLE Allele (ID INTEGER PRIMARY KEY,
variantSetID INTEGER REFERENCES VariantSet(ID),
name TEXT); -- Naming the allele is optional
--
CREATE TABLE AllelePathItem (alleleID INTEGER REFERENCES allele(ID),
pathItemIndex INTEGER NOT NULL, -- zero-based index of this pathItem within the entire path
sequenceID INTEGER NOT NULL REFERENCES Sequence(ID),
start INTEGER NOT NULL,
length INTEGER NOT NULL,
strandIsForward BOOLEAN NOT NULL,
PRIMARY KEY(alleleID, pathItemIndex));
*/
void VGSGSQL::writePathInserts()
{
// create single Variant set
_outStream << "INSERT INTO VariantSet VALUES ("
<< 0 << ", "
<< 0 << ", "
<< "'" << "vg2sg" << "');\n";
_outStream << endl;
// For every VG path, we create one
// Allele, and a list of Allele Path Items.
for (size_t i = 0; i < _pm->getNumPaths(); ++i)
{
if (!_pm->isSpanningPath(i))
{
_outStream << "INSERT INTO Allele VALUES ("
<< i << ", "
<< 0 << ", "
<< "'" << _pm->getPathName(i) << "'"
<< ");\n";
}
}
_outStream << endl;
// create a path (AellePathItem) for every sequence
for (size_t i = 0; i < _pm->getNumPaths(); ++i)
{
if (!_pm->isSpanningPath(i))
{
_outStream << "-- PATH for VG input sequence "
<< _pm->getPathName(i) << "\n";
const vector<SGSegment>& path =
_pm->getSideGraphPath(_pm->getPathName(i));
for (size_t j = 0; j < path.size(); ++j)
{
_outStream << "INSERT INTO AllelePathItem VALUES ("
<< i << ", "
<< j << ", "
<< path[j].getSide().getBase().getSeqID() << ", "
<< path[j].getSide().getBase().getPos() << ", "
<< path[j].getLength() << ", "
<< (path[j].getSide().getForward() ? "\'TRUE\'" : "\'FALSE\'")
<< ");\n";
}
_outStream <<endl;
}
}
}