mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
This commit sets initial dbschemes for cpp, csharp, java, javascript, and python so that automated testing for upgrade scripts would also cover legacy upgrades.
649 lines
19 KiB
Plaintext
649 lines
19 KiB
Plaintext
/*
|
|
* External artifacts
|
|
*/
|
|
|
|
externalDefects(
|
|
unique int id : @externalDefect,
|
|
varchar(900) queryPath : string ref,
|
|
int location : @location ref,
|
|
varchar(900) message : string ref,
|
|
float severity : float ref
|
|
);
|
|
|
|
externalMetrics(
|
|
unique int id : @externalMetric,
|
|
varchar(900) queryPath : string ref,
|
|
int location : @location ref,
|
|
float value : float ref
|
|
);
|
|
|
|
externalData(
|
|
int id : @externalDataElement,
|
|
varchar(900) path : string ref,
|
|
int column: int ref,
|
|
varchar(900) value : string ref
|
|
);
|
|
|
|
snapshotDate(unique date snapshotDate : date ref);
|
|
|
|
sourceLocationPrefix(varchar(900) prefix : string ref);
|
|
|
|
/*
|
|
* Duplicate code
|
|
*/
|
|
|
|
duplicateCode(
|
|
unique int id : @duplication,
|
|
varchar(900) relativePath : string ref,
|
|
int equivClass : int ref);
|
|
|
|
similarCode(
|
|
unique int id : @similarity,
|
|
varchar(900) relativePath : string ref,
|
|
int equivClass : int ref);
|
|
|
|
@duplication_or_similarity = @duplication | @similarity
|
|
|
|
tokens(
|
|
int id : @duplication_or_similarity ref,
|
|
int offset : int ref,
|
|
int beginLine : int ref,
|
|
int beginColumn : int ref,
|
|
int endLine : int ref,
|
|
int endColumn : int ref);
|
|
|
|
/*
|
|
* Version history
|
|
*/
|
|
|
|
svnentries(
|
|
int id : @svnentry,
|
|
varchar(500) revision : string ref,
|
|
varchar(500) author : string ref,
|
|
date revisionDate : date ref,
|
|
int changeSize : int ref
|
|
)
|
|
|
|
svnaffectedfiles(
|
|
int id : @svnentry ref,
|
|
int file : @file ref,
|
|
varchar(500) action : string ref
|
|
)
|
|
|
|
svnentrymsg(
|
|
int id : @svnentry ref,
|
|
varchar(500) message : string ref
|
|
)
|
|
|
|
svnchurn(
|
|
int commit : @svnentry ref,
|
|
int file : @file ref,
|
|
int churnedLines : int ref
|
|
)
|
|
|
|
/*
|
|
* Java dbscheme
|
|
*/
|
|
|
|
@location = @location_default ;
|
|
|
|
locations_default(unique int id: @location_default,
|
|
int file: @file ref,
|
|
int beginLine: int ref,
|
|
int beginColumn: int ref,
|
|
int endLine: int ref,
|
|
int endColumn: int ref
|
|
);
|
|
|
|
hasLocation(int locatableid: @locatable ref, int id: @location ref);
|
|
|
|
@sourceline = @locatable ;
|
|
|
|
numlines(int element_id: @sourceline ref,
|
|
int num_lines: int ref,
|
|
int num_code: int ref,
|
|
int num_comment: int ref
|
|
);
|
|
|
|
/*
|
|
fromSource(0) = unknown,
|
|
fromSource(1) = from source,
|
|
fromSource(2) = from library
|
|
*/
|
|
files(unique int id: @file,
|
|
varchar(900) name: string ref,
|
|
varchar(900) simple: string ref,
|
|
varchar(900) ext: string ref,
|
|
int fromSource: int ref);
|
|
|
|
folders(unique int id: @folder,
|
|
varchar(900) name: string ref,
|
|
varchar(900) simple: string ref);
|
|
|
|
@container = @folder | @file
|
|
|
|
containerparent(int parent: @container ref,
|
|
unique int child: @container ref);
|
|
|
|
cupackage (unique int id: @file ref, int packageid: @package ref);
|
|
|
|
/* Java */
|
|
|
|
packages (unique int id: @package,
|
|
varchar(900) nodeName: string ref);
|
|
|
|
primitives (unique int id: @primitive,
|
|
varchar(20) nodeName: string ref);
|
|
|
|
modifiers (unique int id: @modifier,
|
|
varchar(20) nodeName: string ref);
|
|
|
|
classes (unique int id: @class,
|
|
varchar(900) nodeName: string ref,
|
|
int parentid: @package ref,
|
|
int sourceid: @class ref);
|
|
|
|
interfaces (unique int id: @interface,
|
|
varchar(900) nodeName: string ref,
|
|
int parentid: @package ref,
|
|
int sourceid: @interface ref);
|
|
|
|
fielddecls (unique int id: @fielddecl,
|
|
int parentid: @reftype ref);
|
|
|
|
fieldDeclaredIn (int fieldId: @field ref,
|
|
int fieldDeclId: @fielddecl ref,
|
|
int pos: int ref);
|
|
|
|
fields (unique int id: @field,
|
|
varchar(900) nodeName: string ref,
|
|
int typeid: @type ref,
|
|
int parentid: @reftype ref,
|
|
int sourceid: @field ref);
|
|
|
|
constrs (unique int id: @constructor,
|
|
varchar(900) nodeName: string ref,
|
|
varchar(900) signature: string ref,
|
|
int typeid: @type ref,
|
|
int parentid: @reftype ref,
|
|
int sourceid: @constructor ref);
|
|
|
|
methods (unique int id: @method,
|
|
varchar(900) nodeName: string ref,
|
|
varchar(900) signature: string ref,
|
|
int typeid: @type ref,
|
|
int parentid: @reftype ref,
|
|
int sourceid: @method ref);
|
|
|
|
params (int id: @param,
|
|
varchar(900) nodeName: string ref,
|
|
int typeid: @type ref,
|
|
int pos: int ref,
|
|
int parentid: @callable ref,
|
|
int sourceid: @param ref);
|
|
|
|
exceptions (unique int id: @exception,
|
|
int typeid: @type ref,
|
|
int parentid: @callable ref);
|
|
|
|
isAnnotType (int interfaceid: @interface ref);
|
|
|
|
isAnnotElem (int methodid: @method ref);
|
|
|
|
// annotValue(annot, id2, value) holds iff
|
|
// annot is an application of an annotation @A(v1=n1,...,vk=nk)]
|
|
// && id2=vi, value=ni for some i
|
|
annotValue (int parentid: @annotation ref,
|
|
int id2: @method ref,
|
|
unique int value: @expr ref); // unique because source/bytecode expressions are disjoint
|
|
|
|
isEnumType (int classid: @class ref);
|
|
|
|
isEnumConst (int fieldid: @field ref);
|
|
|
|
typeVars (unique int id: @typevariable,
|
|
varchar(900) nodeName: string ref,
|
|
int pos: int ref,
|
|
int kind: int ref, // unused, but kept for backwards compatibility
|
|
int parentid: @typeormethod ref);
|
|
|
|
wildcards (unique int id: @wildcard,
|
|
varchar(900) nodeName: string ref,
|
|
int kind: int ref);
|
|
|
|
typeBounds (unique int id: @typebound,
|
|
int typeid: @reftype ref, // reftype because there are no primitive bounds
|
|
int pos: int ref,
|
|
int parentid: @boundedtype ref);
|
|
|
|
typeArgs (int argumentid: @reftype ref,
|
|
int pos: int ref,
|
|
int parentid: @typeormethod ref);
|
|
|
|
isParameterized(int memberid: @member ref);
|
|
|
|
isRaw (int memberid: @member ref);
|
|
|
|
erasure (unique int memberid: @member ref,
|
|
int erasureid: @member ref);
|
|
|
|
isAnonymClass (int classid: @class ref,
|
|
int parent: @classinstancexpr ref);
|
|
|
|
isLocalClass (int classid: @class ref,
|
|
int parent: @localclassdeclstmt ref);
|
|
|
|
isDefConstr (int constructorid: @constructor ref);
|
|
|
|
arrays (unique int id: @array,
|
|
varchar(900) nodeName: string ref,
|
|
int elementtypeid: @type ref,
|
|
int dimension: int ref,
|
|
int componenttypeid: @type ref);
|
|
|
|
enclInReftype (unique int child: @reftype ref,
|
|
int parent: @reftype ref);
|
|
|
|
// id1 extends id2
|
|
extendsReftype (int id1: @reftype ref,
|
|
int id2: @classorinterface ref);
|
|
|
|
implInterface (int id1: @classorarray ref,
|
|
int id2: @interface ref);
|
|
|
|
hasModifier (int id1: @modifiable ref,
|
|
int id2: @modifier ref);
|
|
|
|
readsField (unique int id: @readsFieldExpr,
|
|
int id1: @callable ref,
|
|
int id2: @field ref);
|
|
|
|
writesField (unique int id: @writesFieldExpr,
|
|
int id1: @callable ref,
|
|
int id2: @field ref);
|
|
|
|
callsMethod (unique int id: @makesMethodCallExpr,
|
|
int id1: @callable ref,
|
|
int id2: @method ref,
|
|
int kind: int ref);
|
|
|
|
callsConstr (unique int id: @makesConstructorCallExpr,
|
|
int id1: @callable ref,
|
|
int id2: @constructor ref,
|
|
int kind: int ref);
|
|
|
|
imports (unique int id: @import,
|
|
int holder: @typeorpackage ref,
|
|
varchar(900) name: string ref,
|
|
int kind: int ref);
|
|
|
|
stmts (unique int id: @stmt,
|
|
int kind: int ref,
|
|
int parent: @stmtparent ref,
|
|
int idx: int ref,
|
|
int bodydecl: @callable ref);
|
|
|
|
@stmtparent = @callable | @stmt;
|
|
|
|
succs(int fromSuccessor: @stmt ref,
|
|
int toSuccessor: @stmtparent ref);
|
|
|
|
case @stmt.kind of
|
|
0 = @block
|
|
| 1 = @ifstmt
|
|
| 2 = @forstmt
|
|
| 3 = @enhancedforstmt
|
|
| 4 = @whilestmt
|
|
| 5 = @dostmt
|
|
| 6 = @trystmt
|
|
| 7 = @switchstmt
|
|
| 8 = @synchronizedstmt
|
|
| 9 = @returnstmt
|
|
| 10 = @throwstmt
|
|
| 11 = @breakstmt
|
|
| 12 = @continuestmt
|
|
| 13 = @emptystmt
|
|
| 14 = @exprstmt
|
|
| 15 = @labeledstmt
|
|
| 16 = @assertstmt
|
|
| 17 = @localvariabledeclstmt
|
|
| 18 = @localclassdeclstmt
|
|
| 19 = @constructorinvocationstmt
|
|
| 20 = @superconstructorinvocationstmt
|
|
| 21 = @case
|
|
| 22 = @catchclause;
|
|
|
|
exprs(
|
|
unique int id: @expr,
|
|
int kind: int ref,
|
|
int typeid: @type ref,
|
|
int parent: @element ref, // to deal with annotations inside annotations
|
|
int idx: int ref
|
|
);
|
|
|
|
callableEnclosingExpr(
|
|
unique int id: @expr ref,
|
|
int callable_id: @callable ref
|
|
);
|
|
|
|
statementEnclosingExpr(
|
|
unique int id: @expr ref,
|
|
int statement_id: @stmt ref
|
|
);
|
|
|
|
case @expr.kind of
|
|
1 = @arrayaccess
|
|
| 2 = @arraycreationexpr
|
|
| 3 = @arrayinit
|
|
| 4 = @assignexpr
|
|
| 5 = @assignaddexpr
|
|
| 6 = @assignsubexpr
|
|
| 7 = @assignmulexpr
|
|
| 8 = @assigndivexpr
|
|
| 9 = @assignremexpr
|
|
| 10 = @assignandexpr
|
|
| 11 = @assignorexpr
|
|
| 12 = @assignxorexpr
|
|
| 13 = @assignlshiftexpr
|
|
| 14 = @assignrshiftexpr
|
|
| 15 = @assignurshiftexpr
|
|
| 16 = @booleanliteral
|
|
| 17 = @integerliteral
|
|
| 18 = @longliteral
|
|
| 19 = @floatingpointliteral
|
|
| 20 = @doubleliteral
|
|
| 21 = @characterliteral
|
|
| 22 = @stringliteral
|
|
| 23 = @nullliteral
|
|
| 24 = @mulexpr
|
|
| 25 = @divexpr
|
|
| 26 = @remexpr
|
|
| 27 = @addexpr
|
|
| 28 = @subexpr
|
|
| 29 = @lshiftexpr
|
|
| 30 = @rshiftexpr
|
|
| 31 = @urshiftexpr
|
|
| 32 = @andbitexpr
|
|
| 33 = @orbitexpr
|
|
| 34 = @xorbitexpr
|
|
| 35 = @andlogicalexpr
|
|
| 36 = @orlogicalexpr
|
|
| 37 = @ltexpr
|
|
| 38 = @gtexpr
|
|
| 39 = @leexpr
|
|
| 40 = @geexpr
|
|
| 41 = @eqexpr
|
|
| 42 = @neexpr
|
|
| 43 = @postincexpr
|
|
| 44 = @postdecexpr
|
|
| 45 = @preincexpr
|
|
| 46 = @predecexpr
|
|
| 47 = @minusexpr
|
|
| 48 = @plusexpr
|
|
| 49 = @bitnotexpr
|
|
| 50 = @lognotexpr
|
|
| 51 = @castexpr
|
|
| 52 = @classinstancexpr
|
|
| 53 = @conditionalexpr
|
|
| 54 = @parexpr
|
|
| 55 = @instanceofexpr
|
|
| 56 = @localvariabledeclexpr
|
|
| 57 = @typeliteral
|
|
| 58 = @thisaccess
|
|
| 59 = @superaccess
|
|
| 60 = @varaccess
|
|
| 61 = @methodaccess
|
|
| 62 = @typeaccess
|
|
| 63 = @arraytypeaccess
|
|
| 64 = @packageaccess
|
|
| 65 = @wildcardtypeaccess
|
|
| 66 = @annotation
|
|
| 67 = @uniontypeaccess;
|
|
|
|
|
|
@assignment = @assignexpr
|
|
| @assignop;
|
|
|
|
@unaryassignment = @postincexpr
|
|
| @postdecexpr
|
|
| @preincexpr
|
|
| @predecexpr;
|
|
|
|
@assignop = @assignaddexpr
|
|
| @assignsubexpr
|
|
| @assignmulexpr
|
|
| @assigndivexpr
|
|
| @assignremexpr
|
|
| @assignandexpr
|
|
| @assignorexpr
|
|
| @assignxorexpr
|
|
| @assignlshiftexpr
|
|
| @assignrshiftexpr
|
|
| @assignurshiftexpr;
|
|
|
|
@literal = @booleanliteral
|
|
| @integerliteral
|
|
| @longliteral
|
|
| @floatingpointliteral
|
|
| @doubleliteral
|
|
| @characterliteral
|
|
| @stringliteral
|
|
| @nullliteral;
|
|
|
|
@binaryexpr = @mulexpr
|
|
| @divexpr
|
|
| @remexpr
|
|
| @addexpr
|
|
| @subexpr
|
|
| @lshiftexpr
|
|
| @rshiftexpr
|
|
| @urshiftexpr
|
|
| @andbitexpr
|
|
| @orbitexpr
|
|
| @xorbitexpr
|
|
| @andlogicalexpr
|
|
| @orlogicalexpr
|
|
| @ltexpr
|
|
| @gtexpr
|
|
| @leexpr
|
|
| @geexpr
|
|
| @eqexpr
|
|
| @neexpr;
|
|
|
|
@unaryexpr = @postincexpr
|
|
| @postdecexpr
|
|
| @preincexpr
|
|
| @predecexpr
|
|
| @minusexpr
|
|
| @plusexpr
|
|
| @bitnotexpr
|
|
| @lognotexpr;
|
|
|
|
@caller = @classinstancexpr
|
|
| @methodaccess
|
|
| @constructorinvocationstmt
|
|
| @superconstructorinvocationstmt;
|
|
|
|
@abscaller = @caller | @callExpr ;
|
|
|
|
callableBinding (unique int callerid: @caller ref,
|
|
int callee: @callable ref);
|
|
|
|
@exprparent = @stmt | @expr | @callable | @field | @fielddecl | @class | @interface;
|
|
|
|
variableBinding (unique int expr: @varaccess ref,
|
|
int variable: @variable ref);
|
|
|
|
@variable = @localvar | @param | @field;
|
|
@localorparam = @localvar | @param;
|
|
|
|
localvars (unique int id: @localvar,
|
|
varchar(900) nodeName: string ref,
|
|
int typeid: @type ref,
|
|
int parentid: @localvariabledeclexpr ref);
|
|
|
|
@namedexprorstmt =
|
|
@breakstmt
|
|
| @continuestmt
|
|
| @labeledstmt
|
|
| @literal;
|
|
|
|
namestrings (varchar(900) name: string ref,
|
|
unique int parent: @namedexprorstmt ref);
|
|
|
|
javadoc (unique int id: @javadoc);
|
|
|
|
isNormalComment(int commentid : @javadoc ref);
|
|
|
|
hasJavadoc (int documentableid: @member ref,
|
|
int javadocid: @javadoc ref);
|
|
|
|
javadocTag (unique int id: @javadocTag,
|
|
varchar(900) name: string ref,
|
|
int parentid: @javadocParent ref,
|
|
int idx: int ref);
|
|
|
|
javadocText (unique int id: @javadocText,
|
|
varchar(900) text: string ref,
|
|
int parentid: @javadocParent ref,
|
|
int idx: int ref);
|
|
|
|
@typeorpackage = @type | @package;
|
|
|
|
@child = @typeorpackage | @typeormethod | @callable;
|
|
|
|
@modifiable_or_locatable = @modifiable | @locatable_element;
|
|
|
|
@named_element = @commentable | @modifier_named;
|
|
|
|
@typeormethod = @type | @method;
|
|
@classorinterface = @interface | @class;
|
|
@boundedtype = @typevariable | @wildcard;
|
|
@reftype = @classorinterface | @array | @boundedtype;
|
|
@classorarray = @class | @array;
|
|
@type = @primitive | @reftype;
|
|
@callable = @method | @constructor;
|
|
@element = @file | @package | @primitive | @class | @interface | @method | @constructor | @modifier | @param | @exception | @field |
|
|
@annotation | @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl;
|
|
|
|
@modifiable = @member_modifiable| @param | @localvar ;
|
|
|
|
@commentable = @package | @modifiable | @locatable_element ;
|
|
|
|
@package_member = @file | @param | @member ;
|
|
|
|
@member_modifiable = @class | @interface | @method | @constructor | @field ;
|
|
|
|
@expression = @callExpr | @fieldAccessExpr;
|
|
@fieldAccessExpr = @readsFieldExpr | @writesFieldExpr;
|
|
@callExpr = @makesMethodCallExpr | @makesConstructorCallExpr;
|
|
|
|
@member = @method | @constructor | @field | @reftype ;
|
|
|
|
@locatable = @file | @class | @interface | @fielddecl | @field | @constructor | @method | @param | @exception
|
|
| @boundedtype | @typebound | @array
|
|
| @readsFieldExpr | @writesFieldExpr | @makesMethodCallExpr | @makesConstructorCallExpr
|
|
| @import | @stmt | @expr | @localvar | @javadoc | @javadocTag | @javadocText
|
|
| @xmllocatable | @externalDefect | @externalMetric;
|
|
|
|
@locatable_element = @file | @class | @interface | @field | @param | @exception | @callable
|
|
|
|
@named = @param | @member | @package | @typeormethod | @file;
|
|
|
|
@modifier_named = @modifier | @modifiable | @named;
|
|
|
|
@javadocParent = @javadoc | @javadocTag;
|
|
@javadocElement = @javadocTag | @javadocText;
|
|
|
|
/* XML Files */
|
|
|
|
xmlEncoding (unique int id: @file ref, varchar(900) encoding: string ref);
|
|
|
|
xmlDTDs (unique int id: @xmldtd,
|
|
varchar(900) root: string ref,
|
|
varchar(900) publicId: string ref,
|
|
varchar(900) systemId: string ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlElements (unique int id: @xmlelement,
|
|
varchar(900) name: string ref,
|
|
int parentid: @xmlparent ref,
|
|
int idx: int ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlAttrs (unique int id: @xmlattribute,
|
|
int elementid: @xmlelement ref,
|
|
varchar(900) name: string ref,
|
|
varchar(3600) value: string ref,
|
|
int idx: int ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlNs (int id: @xmlnamespace,
|
|
varchar(900) prefixName: string ref,
|
|
varchar(900) URI: string ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlHasNs (int elementId: @xmlnamespaceable ref,
|
|
int nsId: @xmlnamespace ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlComments (unique int id: @xmlcomment,
|
|
varchar(3600) text: string ref,
|
|
int parentid: @xmlparent ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlChars (unique int id: @xmlcharacters,
|
|
varchar(3600) text: string ref,
|
|
int parentid: @xmlparent ref,
|
|
int idx: int ref,
|
|
int isCDATA: int ref,
|
|
int fileid: @file ref);
|
|
|
|
@xmlparent = @file | @xmlelement;
|
|
@xmlnamespaceable = @xmlelement | @xmlattribute;
|
|
|
|
xmllocations(int xmlElement: @xmllocatable ref,
|
|
int location: @location_default ref);
|
|
|
|
@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
|
|
|
|
@top = @element | @locatable | @folder;
|
|
|
|
/* *** Well-Founded Orders *** */
|
|
|
|
/* The type hierarchy order */
|
|
order:typeOrder(3);
|
|
|
|
key:extendsReftype.order(id1, id2, typeOrder);
|
|
key:implInterface.order(id1, id2, typeOrder);
|
|
|
|
/* The AST parent-child order */
|
|
|
|
order:astChildOrder(4);
|
|
|
|
key:classes.order(id, parentid, astChildOrder); // Transitive
|
|
key:interfaces.order(id, parentid, astChildOrder); // Transitive
|
|
key:fields.order(id, parentid, astChildOrder);
|
|
key:methods.order(id, parentid, astChildOrder);
|
|
key:constrs.order(id, parentid, astChildOrder);
|
|
key:params.order(id, parentid, astChildOrder);
|
|
key:exceptions.order(id, parentid, astChildOrder);
|
|
key:typeVars.order(id, parentid, astChildOrder);
|
|
key:typeBounds.order(id, parentid, astChildOrder);
|
|
key:stmts.order(id,parent,astChildOrder);
|
|
key:stmts.order(id,bodydecl,astChildOrder);
|
|
key:exprs.order(id,parent,astChildOrder);
|
|
key:localvars.order(id,parentid,astChildOrder);
|
|
|
|
/* Calls and field accesses */
|
|
|
|
key:readsField.order(id, id1, astChildOrder);
|
|
key:writesField.order(id, id1, astChildOrder);
|
|
key:callsMethod.order(id, id1, astChildOrder);
|
|
key:callsConstr.order(id, id1, astChildOrder);
|
|
|
|
/* Binary Relations */
|
|
|
|
key:enclInReftype.order(child, parent, astChildOrder);
|
|
|