pub fn get_schema_statements() -> Vec<&'static str> {
let mut statements = Vec::new();
statements.extend(NODE_TABLES.iter().copied());
statements.extend(REL_TABLES.iter().copied());
statements
}
const NODE_TABLES: &[&str] = &[
r#"CREATE NODE TABLE IF NOT EXISTS File(
qualifiedName STRING,
name STRING,
filePath STRING,
language STRING,
loc INT64,
hash STRING,
repoId STRING,
package STRING,
churn INT64,
churnCount INT64,
complexity INT64,
codeHealth DOUBLE,
lineCount INT64,
is_test BOOLEAN,
docstring STRING,
semantic_context STRING,
embedding DOUBLE[],
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS Class(
qualifiedName STRING,
name STRING,
filePath STRING,
lineStart INT64,
lineEnd INT64,
methodCount INT64,
complexity INT64,
loc INT64,
is_abstract BOOLEAN,
nesting_level INT64,
decorators STRING[],
churn INT64,
num_authors INT64,
repoId STRING,
docstring STRING,
semantic_context STRING,
embedding DOUBLE[],
last_modified STRING,
author STRING,
commit_count INT64,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS Function(
qualifiedName STRING,
name STRING,
filePath STRING,
lineStart INT64,
lineEnd INT64,
complexity INT64,
loc INT64,
is_async BOOLEAN,
is_method BOOLEAN,
is_public BOOLEAN,
is_exported BOOLEAN,
has_yield BOOLEAN,
yield_count INT64,
max_chain_depth INT64,
chain_example STRING,
parameters STRING[],
parameter_types STRING,
return_type STRING,
decorators STRING[],
in_degree INT64,
out_degree INT64,
churn INT64,
num_authors INT64,
repoId STRING,
docstring STRING,
semantic_context STRING,
embedding DOUBLE[],
last_modified STRING,
author STRING,
commit_count INT64,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS Commit(
hash STRING,
author STRING,
timestamp STRING,
message STRING,
repoId STRING,
PRIMARY KEY(hash)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS Module(
qualifiedName STRING,
name STRING,
is_external BOOLEAN,
package STRING,
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS Variable(
qualifiedName STRING,
name STRING,
filePath STRING,
lineStart INT64,
var_type STRING,
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS DetectorMetadata(
qualifiedName STRING,
detector STRING,
metric_name STRING,
metric_value DOUBLE,
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS Concept(
qualifiedName STRING,
name STRING,
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS ExternalClass(
qualifiedName STRING,
name STRING,
module STRING,
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS ExternalFunction(
qualifiedName STRING,
name STRING,
module STRING,
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS BuiltinFunction(
qualifiedName STRING,
name STRING,
module STRING,
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS Type(
qualifiedName STRING,
name STRING,
kind STRING,
is_generic BOOLEAN,
type_args STRING[],
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS Component(
qualifiedName STRING,
name STRING,
path_pattern STRING,
file_count INT64,
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
r#"CREATE NODE TABLE IF NOT EXISTS Domain(
qualifiedName STRING,
name STRING,
description STRING,
repoId STRING,
PRIMARY KEY(qualifiedName)
)"#,
];
const REL_TABLES: &[&str] = &[
"CREATE REL TABLE IF NOT EXISTS CONTAINS_CLASS(FROM File TO Class)",
"CREATE REL TABLE IF NOT EXISTS CONTAINS_FUNCTION(FROM File TO Function)",
"CREATE REL TABLE IF NOT EXISTS CONTAINS_METHOD(FROM Class TO Function)",
r#"CREATE REL TABLE IF NOT EXISTS CALLS(
FROM Function TO Function,
line INT64,
call_name STRING,
is_self_call BOOLEAN,
count INT64,
coupling_type STRING
)"#,
r#"CREATE REL TABLE IF NOT EXISTS CALLS_CLASS(
FROM Function TO Class,
line INT64,
call_name STRING,
is_self_call BOOLEAN,
count INT64,
coupling_type STRING
)"#,
"CREATE REL TABLE IF NOT EXISTS USES_VAR(FROM Function TO Variable)",
"CREATE REL TABLE IF NOT EXISTS USES_FUNC(FROM Function TO Function)",
"CREATE REL TABLE IF NOT EXISTS USES_CLASS(FROM Function TO Class)",
"CREATE REL TABLE IF NOT EXISTS FLAGGED_BY_FUNC(FROM Function TO DetectorMetadata)",
"CREATE REL TABLE IF NOT EXISTS FLAGGED_BY_CLASS(FROM Class TO DetectorMetadata)",
"CREATE REL TABLE IF NOT EXISTS IMPORTS(FROM File TO Module)",
"CREATE REL TABLE IF NOT EXISTS IMPORTS_FILE(FROM File TO File)",
"CREATE REL TABLE IF NOT EXISTS IMPORTS_EXT_CLASS(FROM File TO ExternalClass)",
"CREATE REL TABLE IF NOT EXISTS IMPORTS_EXT_FUNC(FROM File TO ExternalFunction)",
"CREATE REL TABLE IF NOT EXISTS INHERITS(FROM Class TO Class)",
"CREATE REL TABLE IF NOT EXISTS DEFINES(FROM Class TO Function)",
"CREATE REL TABLE IF NOT EXISTS DEFINES_VAR(FROM Function TO Variable)",
"CREATE REL TABLE IF NOT EXISTS OVERRIDES(FROM Function TO Function)",
"CREATE REL TABLE IF NOT EXISTS DECORATES(FROM Function TO Function)",
"CREATE REL TABLE IF NOT EXISTS TESTS(FROM Function TO Function)",
r#"CREATE REL TABLE IF NOT EXISTS DATA_FLOWS_TO(
FROM Function TO Function,
tainted BOOLEAN,
via STRING
)"#,
r#"CREATE REL TABLE IF NOT EXISTS SIMILAR_TO(
FROM Function TO Function,
score DOUBLE,
method STRING
)"#,
"CREATE REL TABLE IF NOT EXISTS BELONGS_TO_COMPONENT(FROM File TO Component)",
"CREATE REL TABLE IF NOT EXISTS BELONGS_TO_DOMAIN(FROM Component TO Domain)",
r#"CREATE REL TABLE IF NOT EXISTS CALLS_EXT_FUNC(
FROM Function TO ExternalFunction,
line INT64,
call_name STRING,
is_self_call BOOLEAN,
count INT64,
coupling_type STRING
)"#,
r#"CREATE REL TABLE IF NOT EXISTS CALLS_EXT_CLASS(
FROM Function TO ExternalClass,
line INT64,
call_name STRING,
is_self_call BOOLEAN,
count INT64,
coupling_type STRING
)"#,
r#"CREATE REL TABLE IF NOT EXISTS CALLS_BUILTIN(
FROM Function TO BuiltinFunction,
line INT64,
call_name STRING,
is_self_call BOOLEAN,
count INT64,
coupling_type STRING
)"#,
r#"CREATE REL TABLE IF NOT EXISTS MODIFIED_IN_FUNC(
FROM Function TO Commit,
line_start INT64,
line_end INT64
)"#,
r#"CREATE REL TABLE IF NOT EXISTS MODIFIED_IN_CLASS(
FROM Class TO Commit,
line_start INT64,
line_end INT64
)"#,
"CREATE REL TABLE IF NOT EXISTS RETURNS(FROM Function TO Type)",
r#"CREATE REL TABLE IF NOT EXISTS HAS_PARAMETER(
FROM Function TO Type,
name STRING,
position INT64
)"#,
"CREATE REL TABLE IF NOT EXISTS SUBTYPES(FROM Type TO Type)",
"CREATE REL TABLE IF NOT EXISTS TYPE_OF_CLASS(FROM Type TO Class)",
];
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_schema_statements() {
let statements = get_schema_statements();
assert!(!statements.is_empty());
for stmt in &statements {
assert!(
stmt.contains("CREATE NODE TABLE") || stmt.contains("CREATE REL TABLE"),
"Invalid statement: {}",
stmt
);
}
}
}