in server/src/graphStore.ts [394:489]
public load(file: string, transformerFactory: (workspaceRoot: string) => UriTransformer): Promise<void> {
this.db = new Sqlite(file, { readonly: true });
this.readMetaData();
this.readSource();
this.allDocumentsStmt = this.db.prepare('Select id, uri, documentHash From documents');
this.getDocumentContentStmt = this.db.prepare('Select content From contents Where documentHash = ?');
this.findDocumentStmt = this.db.prepare('Select id From documents Where uri = ?');
/* eslint-disable indent */
this.findRangeStmt = this.db.prepare([
'Select r.id, r.belongsTo, r.startLine, r.startCharacter, r.endline, r.endCharacter From ranges r',
'Inner Join documents d On r.belongsTo = d.id',
'where',
'd.uri = $uri and (',
'(r.startLine < $line and $line < r.endline) or',
'(r.startLine = $line and r.startCharacter <= $character and $line < r.endline) or',
'(r.startLine < $line and r.endLine = $line and $character <= r.endCharacter) or',
'(r.startLine = $line and r.endLine = $line and r.startCharacter <= $character and $character <= r.endCharacter)',
')'
].join(' '));
/* eslint-enable indent */
const nextLabel = this.edgeLabels !== undefined ? this.edgeLabels.get(EdgeLabels.next)! : EdgeLabels.next;
const monikerEdgeLabel = this.edgeLabels !== undefined ? this.edgeLabels.get(EdgeLabels.moniker)! : EdgeLabels.moniker;
const monikerAttachLabel = this.edgeLabels !== undefined ? this.edgeLabels.get(EdgeLabels.attach)! : EdgeLabels.attach;
this.findResultStmt = this.db.prepare([
'Select v.id, v.label, v.value From vertices v',
'Inner Join edges e On e.inV = v.id',
'Where e.outV = $source and e.label = $label'
].join(' '));
this.findMonikerStmt = this.db.prepare([
'Select v.id, v.label, v.value From vertices v',
'Inner Join edges e On e.inV = v.id',
`Where e.outV = $source and e.label = ${monikerEdgeLabel}`
].join(' '));
this.findMatchingMonikersStmt = this.db.prepare([
'Select v.id, v.label, v.value From vertices v',
'Inner Join monikers m on v.id = m.id',
'Where m.identifier = $identifier and m.scheme = $scheme and m.id != $exclude'
].join(' '));
this.findAttachedMonikersStmt = this.db.prepare([
'Select v.id, v.label, v.value from vertices v',
'Inner Join edges e On e.outV = v.id',
`Where e.inV = $source and e.label = ${monikerAttachLabel}`
].join(' '));
this.findNextMonikerStmt = this.db.prepare([
'Select e.inV From edges e',
`Where e.outV = $source and e.label = ${monikerAttachLabel}`
].join(' '));
this.findVertexIdForMonikerStmt = this.db.prepare([
'Select v.id from vertices v',
'INNER Join edges e On v.id = e.outV',
`Where e.label = ${monikerEdgeLabel} and e.inV = $id`
].join(' '));
this.findNextVertexStmt = this.db.prepare([
'Select e.inV From edges e',
`Where e.outV = $source and e.label = ${nextLabel}`
].join(' '));
this.findPreviousVertexStmt = this.db.prepare([
'Select e.outV From edges e',
`Where e.inV = $source and e.label = ${nextLabel}`
].join(' '));
this.findResultForDocumentStmt = this.db.prepare([
'Select v.id, v.label, v.value from vertices v',
'Inner Join edges e On e.inV = v.id',
'Inner Join documents d On d.id = e.outV',
'Where d.uri = $uri and e.label = $label'
].join(' '));
this.findRangeFromResult = this.db.prepare([
'Select r.id, r.startLine, r.startCharacter, r.endLine, r.endCharacter, d.uri from ranges r',
'Inner Join items i On i.inV = r.id',
'Inner Join documents d On r.belongsTo = d.id',
'Where i.outV = $id'
].join(' '));
this.findRangeFromReferenceResult = this.db.prepare([
'Select r.id, r.startLine, r.startCharacter, r.endLine, r.endCharacter, i.property, d.uri from ranges r',
'Inner Join items i On i.inV = r.id',
'Inner Join documents d On r.belongsTo = d.id',
'Where i.outV = $id and (i.property in (1, 2, 3))'
].join(' '));
this.findResultFromReferenceResult = this.db.prepare([
'Select v.id, v.label, v.value from vertices v',
'Inner Join items i On i.inV = v.id',
'Where i.outV = $id and i.property = 4'
].join(' '));
this.findCascadesFromReferenceResult = this.db.prepare([
'Select v.id, v.label, v.value from vertices v',
'Inner Join items i On i.inV = v.id',
'Where i.outV = $id and i.property = 5'
].join(' '));
this.initialize(transformerFactory);
return Promise.resolve();
}