<?xml version="1.0" encoding="UTF-8" ?>
<orm ext:registerShortName="true" ext:appName="nop-code" ext:icon="code-2" ext:entityPackageName="io.nop.code.dao.entity"
ext:basePackageName="io.nop.code" ext:mavenGroupId="io.github.entropy-cloud" ext:mavenArtifactId="nop-code"
ext:allowIdAsColName="true" ext:useStdFields="true"
x:schema="/nop/schema/orm/orm.xdef" xmlns:x="/nop/schema/xdsl.xdef" xmlns:ext="ext" xmlns:i18n-en="i18n-en">
<domains>
<domain name="codeId" precision="36" stdSqlType="VARCHAR"/>
<domain name="filePath" precision="500" stdSqlType="VARCHAR"/>
<domain name="qualifiedName" precision="500" stdSqlType="VARCHAR"/>
<domain name="symbolName" precision="200" stdSqlType="VARCHAR"/>
<domain name="packageName" precision="200" stdSqlType="VARCHAR"/>
<domain name="signature" precision="2000" stdSqlType="VARCHAR"/>
<domain name="documentation" precision="4000" stdSqlType="VARCHAR"/>
<domain name="language" precision="20" stdSqlType="VARCHAR"/>
<domain name="lineNumber" stdSqlType="INTEGER"/>
<domain name="columnNumber" stdSqlType="INTEGER"/>
<domain name="jsonContent" precision="4096" stdDomain="json" stdSqlType="VARCHAR"/>
<domain name="jsonImport" precision="8192" stdDomain="json" stdSqlType="VARCHAR"/>
</domains>
<dicts>
<dict label="符号类型" name="code/symbol_kind" valueType="string">
<description>代码符号类型枚举</description>
<option code="CLASS" label="类" value="10"/>
<option code="INTERFACE" label="接口" value="20"/>
<option code="ENUM" label="枚举" value="30"/>
<option code="ANNOTATION_TYPE" label="注解类型" value="40"/>
<option code="TYPE_ALIAS" label="类型别名" value="45"/>
<option code="MIXIN" label="Mixin" value="46"/>
<option code="DECORATOR" label="装饰器" value="47"/>
<option code="METHOD" label="方法" value="50"/>
<option code="FUNCTION" label="函数" value="55"/>
<option code="CONSTRUCTOR" label="构造器" value="60"/>
<option code="FIELD" label="字段" value="70"/>
<option code="CONSTANT" label="常量" value="80"/>
<option code="NAMESPACE" label="命名空间" value="90"/>
<option code="PARAMETER" label="参数" value="95"/>
<option code="LOCAL_VARIABLE" label="局部变量" value="96"/>
<option code="TYPE_PARAMETER" label="类型参数" value="97"/>
<option code="IMPORT" label="导入" value="98"/>
</dict>
<dict label="访问修饰符" name="code/access_modifier" valueType="string">
<description>符号的访问级别</description>
<option code="PUBLIC" label="公开" value="10"/>
<option code="PROTECTED" label="受保护" value="20"/>
<option code="PRIVATE" label="私有" value="30"/>
<option code="PACKAGE_PRIVATE" label="包私有" value="40"/>
<option code="INTERNAL" label="内部" value="41"/>
<option code="NO_MODIFIER" label="无修饰符" value="50"/>
</dict>
<dict label="引用类型" name="code/reference_kind" valueType="string">
<description>符号引用的类型</description>
<option code="READ" label="读取" value="10"/>
<option code="WRITE" label="写入" value="20"/>
<option code="CALL" label="调用" value="30"/>
<option code="TYPE_REFERENCE" label="类型引用" value="40"/>
<option code="EXTENDS" label="继承" value="50"/>
<option code="IMPLEMENTS" label="实现" value="60"/>
<option code="ANNOTATES" label="注解" value="70"/>
<option code="IMPORTS" label="导入" value="80"/>
<option code="OVERRIDES" label="重写" value="90"/>
</dict>
<dict label="索引状态" name="code/index_status" valueType="string">
<description>索引状态</description>
<option code="CREATED" label="已创建" value="10"/>
<option code="INDEXING" label="索引中" value="20"/>
<option code="READY" label="就绪" value="30"/>
<option code="ERROR" label="错误" value="40"/>
<option code="COMPLETED" label="已完成" value="50"/>
<option code="DETECTED" label="已检测" value="60"/>
</dict>
<dict label="编程语言" name="code/language" valueType="string">
<description>编程语言类型</description>
<option code="JAVA" label="Java" value="10"/>
<option code="PYTHON" label="Python" value="20"/>
<option code="TYPESCRIPT" label="TypeScript" value="30"/>
<option code="JAVASCRIPT" label="JavaScript" value="40"/>
</dict>
<dict label="继承关系类型" name="code/relation_type" valueType="string">
<description>类型继承关系</description>
<option code="EXTENDS" label="继承" value="10"/>
<option code="IMPLEMENTS" label="实现" value="20"/>
</dict>
</dicts>
<entities>
核心索引实体
======================================== -->
<entity className="io.nop.code.dao.entity.NopCodeIndex" displayName="代码索引" i18n-en:displayName="Code Index"
name="io.nop.code.dao.entity.NopCodeIndex" registerShortName="true"
tableName="nop_code_index" ext:icon="search">
<columns>
<column code="ID" displayName="索引ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" stdSqlType="VARCHAR" tagSet="seq" ui:show="X"/>
<column code="NAME" displayName="索引名称" mandatory="true" name="name"
precision="100" propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="ROOT_PATH" displayName="根路径" mandatory="true" name="rootPath"
precision="500" propId="3" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="LANGUAGE" displayName="编程语言" domain="language" name="language"
precision="20" propId="4" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="SYMBOL_COUNT" displayName="符号数量" name="symbolCount"
propId="5" stdDataType="int" stdSqlType="INTEGER"/>
<column code="FILE_COUNT" displayName="文件数量" name="fileCount"
propId="6" stdDataType="int" stdSqlType="INTEGER"/>
<column code="STATUS" displayName="状态" name="status" precision="20"
propId="7" stdDataType="string" stdSqlType="VARCHAR" ext:dict="code/index_status"/>
<column code="LAST_INDEXED" displayName="最后索引时间" name="lastIndexed"
propId="8" stdDataType="long" stdSqlType="BIGINT"/>
<column code="INDEX_VERSION" displayName="索引版本" name="indexVersion"
propId="9" stdDataType="int" stdSqlType="INTEGER"/>
</columns>
<comment>代码索引主表</comment>
<relations>
<to-many displayName="文件列表" name="files" refEntityName="io.nop.code.dao.entity.NopCodeFile"
refPropName="index" cascadeDelete="true">
<join>
<on leftProp="id" rightProp="indexId"/>
</join>
</to-many>
<to-many displayName="符号列表" name="symbols" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="index" cascadeDelete="true">
<join>
<on leftProp="id" rightProp="indexId"/>
</join>
</to-many>
<to-many displayName="依赖列表" name="dependencies" refEntityName="io.nop.code.dao.entity.NopCodeDependency"
refPropName="index" cascadeDelete="true">
<join>
<on leftProp="id" rightProp="indexId"/>
</join>
</to-many>
<to-many displayName="执行流" name="flows" refEntityName="io.nop.code.dao.entity.NopCodeFlow"
refPropName="index" cascadeDelete="true">
<join>
<on leftProp="id" rightProp="indexId"/>
</join>
</to-many>
<to-many displayName="引用" name="usages" refEntityName="io.nop.code.dao.entity.NopCodeUsage"
refPropName="index" cascadeDelete="true">
<join>
<on leftProp="id" rightProp="indexId"/>
</join>
</to-many>
<to-many displayName="调用" name="calls" refEntityName="io.nop.code.dao.entity.NopCodeCall"
refPropName="index" cascadeDelete="true">
<join>
<on leftProp="id" rightProp="indexId"/>
</join>
</to-many>
<to-many displayName="继承" name="inheritances" refEntityName="io.nop.code.dao.entity.NopCodeInheritance"
refPropName="index" cascadeDelete="true">
<join>
<on leftProp="id" rightProp="indexId"/>
</join>
</to-many>
<to-many displayName="注解使用" name="annotationUsages" refEntityName="io.nop.code.dao.entity.NopCodeAnnotationUsage"
refPropName="index" cascadeDelete="true">
<join>
<on leftProp="id" rightProp="indexId"/>
</join>
</to-many>
<to-many displayName="语义边" name="semanticEdges" refEntityName="io.nop.code.dao.entity.NopCodeSemanticEdge"
refPropName="index" cascadeDelete="true">
<join>
<on leftProp="id" rightProp="indexId"/>
</join>
</to-many>
</relations>
<indexes>
<index name="idx_nop_code_index_status">
<column name="status"/>
</index>
<index name="idx_nop_code_index_root_path">
<column name="rootPath"/>
</index>
<index name="idx_nop_code_index_language">
<column name="language"/>
</index>
<index name="idx_nop_code_index_last_indexed">
<column name="lastIndexed"/>
</index>
</indexes>
</entity>
<entity className="io.nop.code.dao.entity.NopCodeFile" displayName="代码文件" i18n-en:displayName="Code File"
name="io.nop.code.dao.entity.NopCodeFile" registerShortName="true"
tableName="nop_code_file" ext:icon="file-code">
<columns>
<column code="ID" displayName="文件ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" tagSet="seq" ui:show="X" stdSqlType="VARCHAR" />
<column code="INDEX_ID" displayName="索引ID" domain="codeId" mandatory="true" name="indexId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="FILE_PATH" displayName="文件路径" domain="filePath" mandatory="true" name="filePath"
propId="3" stdDataType="string" stdSqlType="VARCHAR" tagSet="disp"/>
<column code="PACKAGE_NAME" displayName="包名" domain="packageName" name="packageName"
propId="4" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="LANGUAGE" displayName="语言" domain="language" name="language"
precision="20" propId="5" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="LINE_COUNT" displayName="行数" name="lineCount"
propId="6" stdDataType="int" stdSqlType="INTEGER"/>
<column code="IMPORTS" displayName="导入列表" domain="jsonImport" name="imports"
propId="7" stdDataType="string" stdSqlType="VARCHAR" ui:control="textarea"/>
<column code="SOURCE_CODE" displayName="源代码" name="sourceCode"
propId="8" stdDataType="string" stdSqlType="CLOB" ui:control="textarea"/>
<column code="FILE_HASH" displayName="文件内容哈希" name="fileHash"
precision="64" propId="9" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="LAST_MODIFIED" displayName="最后修改时间" name="lastModified"
propId="10" stdDataType="long" stdSqlType="BIGINT"/>
<column code="FILE_SIZE" displayName="文件大小" name="fileSize"
propId="11" stdDataType="long" stdSqlType="BIGINT"/>
</columns>
<comment>源代码文件,imports字段存储JSON数组</comment>
<relations>
<to-one name="index" refDisplayName="文件列表" refEntityName="io.nop.code.dao.entity.NopCodeIndex"
refPropName="files" tagSet="pub">
<join>
<on leftProp="indexId" rightProp="id"/>
</join>
</to-one>
<to-many displayName="符号列表" name="symbols" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="file">
<join>
<on leftProp="id" rightProp="fileId"/>
</join>
</to-many>
<to-many displayName="引用" name="usages" refEntityName="io.nop.code.dao.entity.NopCodeUsage"
refPropName="file">
<join>
<on leftProp="id" rightProp="fileId"/>
</join>
</to-many>
<to-many displayName="调用" name="calls" refEntityName="io.nop.code.dao.entity.NopCodeCall"
refPropName="file">
<join>
<on leftProp="id" rightProp="fileId"/>
</join>
</to-many>
</relations>
<unique-keys>
<unique-key columns="indexId,filePath" constraint="UK_NOP_CODE_FILE_PATH" name="filePathKey"/>
</unique-keys>
</entity>
符号统一表 - 支持所有符号类型
======================================== -->
<entity className="io.nop.code.dao.entity.NopCodeSymbol" displayName="符号" i18n-en:displayName="Symbol"
name="io.nop.code.dao.entity.NopCodeSymbol" registerShortName="true"
tableName="nop_code_symbol" ext:icon="code">
<columns>
<column code="ID" displayName="符号ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" tagSet="seq" ui:show="X" stdSqlType="VARCHAR" />
<column code="INDEX_ID" displayName="索引ID" domain="codeId" mandatory="true" name="indexId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="FILE_ID" displayName="文件ID" domain="codeId" mandatory="true" name="fileId"
propId="3" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="KIND" displayName="符号类型" mandatory="true" name="kind"
precision="20" propId="4" stdDataType="string" stdSqlType="VARCHAR" ext:dict="code/symbol_kind"/>
<column code="NAME" displayName="名称" domain="symbolName" mandatory="true" name="name"
propId="5" stdDataType="string" stdSqlType="VARCHAR" tagSet="disp"/>
<column code="QUALIFIED_NAME" displayName="全限定名" domain="qualifiedName" name="qualifiedName"
propId="6" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="ACCESS_MODIFIER" displayName="访问修饰符" name="accessModifier"
precision="20" propId="7" stdDataType="string" stdSqlType="VARCHAR" ext:dict="code/access_modifier"/>
<column code="DEPRECATED" displayName="已废弃" name="deprecated"
propId="8" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="DOCUMENTATION" displayName="文档注释" domain="documentation" name="documentation"
propId="9" stdDataType="string" stdSqlType="VARCHAR" ui:control="textarea"/>
<column code="LINE" displayName="起始行" domain="lineNumber" name="line"
propId="10" stdDataType="int" stdSqlType="INTEGER"/>
<column code="COLUMN" displayName="起始列" domain="columnNumber" name="column"
propId="11" stdDataType="int" stdSqlType="INTEGER"/>
<column code="END_LINE" displayName="结束行" domain="lineNumber" name="endLine"
propId="12" stdDataType="int" stdSqlType="INTEGER"/>
<column code="END_COLUMN" displayName="结束列" domain="columnNumber" name="endColumn"
propId="13" stdDataType="int" stdSqlType="INTEGER"/>
<column code="USAGE_COUNT" displayName="使用次数" name="usageCount"
propId="14" stdDataType="int" stdSqlType="INTEGER"/>
<column code="PARENT_ID" displayName="父符号ID" domain="codeId" name="parentId"
propId="15" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="DECLARING_SYMBOL_ID" displayName="所属类型ID" domain="codeId" name="declaringSymbolId"
propId="16" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="SUPER_CLASS_NAME" displayName="父类名" domain="qualifiedName" name="superClassName"
propId="17" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="IS_ABSTRACT" displayName="抽象" name="isAbstract"
propId="18" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="IS_FINAL" displayName="final" name="isFinal"
propId="19" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="SIGNATURE" displayName="签名" domain="signature" name="signature"
propId="20" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="RETURN_TYPE" displayName="返回类型" domain="qualifiedName" name="returnType"
propId="21" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="IS_STATIC" displayName="static" name="isStatic"
propId="22" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="IS_SYNCHRONIZED" displayName="synchronized" name="isSynchronized"
propId="23" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="IS_NATIVE" displayName="native" name="isNative"
propId="24" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="FIELD_TYPE" displayName="字段类型" domain="qualifiedName" name="fieldType"
propId="25" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="IS_VOLATILE" displayName="volatile" name="isVolatile"
propId="26" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="IS_TRANSIENT" displayName="transient" name="isTransient"
propId="27" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="EXT_DATA" displayName="扩展数据" domain="jsonContent" name="extData"
propId="28" stdDataType="string" stdSqlType="VARCHAR" ui:control="textarea"/>
<column code="ASYNC_FLAG" displayName="异步" name="asyncFlag"
propId="29" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="READONLY_FLAG" displayName="只读" name="readonlyFlag"
propId="30" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="RAW_RETURN_TYPE" displayName="原始返回类型" domain="qualifiedName" name="rawReturnType"
propId="31" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="RAW_FIELD_TYPE" displayName="原始字段类型" domain="qualifiedName" name="rawFieldType"
propId="32" stdDataType="string" stdSqlType="VARCHAR"/>
</columns>
<comment>
符号统一表。extData存储JSON格式的扩展信息:
- 类/接口: {typeParameters:[], interfaces:[], innerClasses:[]}
- 枚举: {constants:[{name,line,documentation,annotations[]}], interfaces:[]}
- 注解类型: {attributes:[], isRepeatable, targets, retention}
- 方法: {parameters:[], exceptions:[], typeParameters:[], overrides:[]}
- 构造器: {parameters:[], exceptions:[]}
- 字段: {defaultValue, annotations:[]}
</comment>
<relations>
<to-one name="index" refDisplayName="符号列表" refEntityName="io.nop.code.dao.entity.NopCodeIndex"
refPropName="symbols" tagSet="pub">
<join>
<on leftProp="indexId" rightProp="id"/>
</join>
</to-one>
<to-one name="file" refDisplayName="符号列表" refEntityName="io.nop.code.dao.entity.NopCodeFile"
refPropName="symbols" tagSet="pub">
<join>
<on leftProp="fileId" rightProp="id"/>
</join>
</to-one>
<to-one name="parent" refDisplayName="子符号" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="children" tagSet="pub">
<join>
<on leftProp="parentId" rightProp="id"/>
</join>
</to-one>
<to-one name="declaringSymbol" refDisplayName="成员" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="members" tagSet="pub">
<join>
<on leftProp="declaringSymbolId" rightProp="id"/>
</join>
</to-one>
<to-many displayName="子符号" name="children" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="parent">
<join>
<on leftProp="id" rightProp="parentId"/>
</join>
</to-many>
<to-many displayName="成员" name="members" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="declaringSymbol">
<join>
<on leftProp="id" rightProp="declaringSymbolId"/>
</join>
</to-many>
<to-many displayName="引用" name="usages" refEntityName="io.nop.code.dao.entity.NopCodeUsage"
refPropName="symbol">
<join>
<on leftProp="id" rightProp="symbolId"/>
</join>
</to-many>
<to-many displayName="注解使用" name="annotations" refEntityName="io.nop.code.dao.entity.NopCodeAnnotationUsage"
refPropName="annotatedSymbol">
<join>
<on leftProp="id" rightProp="annotatedSymbolId"/>
</join>
</to-many>
<to-many displayName="入口执行流" name="entryFlows" refEntityName="io.nop.code.dao.entity.NopCodeFlow"
refPropName="entryPoint">
<join>
<on leftProp="id" rightProp="entryPointId"/>
</join>
</to-many>
<to-many displayName="流成员" name="flowMemberships" refEntityName="io.nop.code.dao.entity.NopCodeFlowMembership"
refPropName="symbol">
<join>
<on leftProp="id" rightProp="symbolId"/>
</join>
</to-many>
<to-many displayName="被调用" name="callees" refEntityName="io.nop.code.dao.entity.NopCodeCall"
refPropName="caller">
<join>
<on leftProp="id" rightProp="callerId"/>
</join>
</to-many>
<to-many displayName="调用" name="callers" refEntityName="io.nop.code.dao.entity.NopCodeCall"
refPropName="callee">
<join>
<on leftProp="id" rightProp="calleeId"/>
</join>
</to-many>
<to-many displayName="父类型" name="superTypes" refEntityName="io.nop.code.dao.entity.NopCodeInheritance"
refPropName="subType">
<join>
<on leftProp="id" rightProp="subTypeId"/>
</join>
</to-many>
<to-many displayName="子类型" name="subTypes" refEntityName="io.nop.code.dao.entity.NopCodeInheritance"
refPropName="superType">
<join>
<on leftProp="id" rightProp="superTypeId"/>
</join>
</to-many>
</relations>
<indexes>
<index name="ix_nop_code_symbol_index_id_qualified_name">
<column name="indexId"/>
<column name="qualifiedName"/>
</index>
<index name="ix_nop_code_symbol_index_id_name">
<column name="indexId"/>
<column name="name"/>
</index>
<index name="ix_nop_code_symbol_index_id_kind">
<column name="indexId"/>
<column name="kind"/>
</index>
<index name="ix_nop_code_symbol_index_id_declaring_symbol_id">
<column name="indexId"/>
<column name="declaringSymbolId"/>
</index>
<index name="ix_nop_code_symbol_file_id">
<column name="fileId"/>
</index>
<index name="ix_nop_code_symbol_parent_id">
<column name="parentId"/>
</index>
</indexes>
</entity>
关系实体(引用、调用、继承)
======================================== -->
<entity className="io.nop.code.dao.entity.NopCodeUsage" displayName="符号引用" i18n-en:displayName="Symbol Usage"
name="io.nop.code.dao.entity.NopCodeUsage" registerShortName="true"
tableName="nop_code_usage" ext:icon="link-2">
<columns>
<column code="ID" displayName="ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" tagSet="seq" ui:show="X" stdSqlType="VARCHAR" />
<column code="INDEX_ID" displayName="索引ID" domain="codeId" mandatory="true" name="indexId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="SYMBOL_ID" displayName="被引用符号ID" domain="codeId" mandatory="true" name="symbolId"
propId="3" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="FILE_ID" displayName="文件ID" domain="codeId" mandatory="true" name="fileId"
propId="4" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="KIND" displayName="引用类型" mandatory="true" name="kind"
precision="20" propId="5" stdDataType="string" stdSqlType="VARCHAR" ext:dict="code/reference_kind"/>
<column code="LINE" displayName="行号" domain="lineNumber" mandatory="true" name="line"
propId="6" stdDataType="int" stdSqlType="INTEGER"/>
<column code="COLUMN" displayName="列号" domain="columnNumber" name="column"
propId="7" stdDataType="int" stdSqlType="INTEGER"/>
<column code="ENCLOSING_SYMBOL_ID" displayName="所在符号ID" domain="codeId" name="enclosingSymbolId"
propId="8" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="CONTEXT" displayName="上下文" name="context"
precision="1000" propId="9" stdDataType="string" stdSqlType="VARCHAR"/>
</columns>
<comment>符号引用关系</comment>
<relations>
<to-one name="index" refDisplayName="引用" refEntityName="io.nop.code.dao.entity.NopCodeIndex"
refPropName="usages" tagSet="pub">
<join>
<on leftProp="indexId" rightProp="id"/>
</join>
</to-one>
<to-one name="symbol" refDisplayName="引用" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="usages" tagSet="pub">
<join>
<on leftProp="symbolId" rightProp="id"/>
</join>
</to-one>
<to-one name="file" refDisplayName="引用" refEntityName="io.nop.code.dao.entity.NopCodeFile"
refPropName="usages" tagSet="pub">
<join>
<on leftProp="fileId" rightProp="id"/>
</join>
</to-one>
<to-one name="enclosingSymbol" refDisplayName="引用" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="enclosingUsages" tagSet="pub">
<join>
<on leftProp="enclosingSymbolId" rightProp="id"/>
</join>
</to-one>
</relations>
<indexes>
<index name="ix_nop_code_usage_symbol_id">
<column name="symbolId"/>
</index>
<index name="ix_nop_code_usage_index_id_kind">
<column name="indexId"/>
<column name="kind"/>
</index>
<index name="ix_nop_code_usage_file_id">
<column name="fileId"/>
</index>
<index name="ix_nop_code_usage_enclosing_symbol_id">
<column name="enclosingSymbolId"/>
</index>
</indexes>
<unique-keys>
<unique-key columns="indexId,symbolId,fileId,kind,line,column" name="uk_usage_unique"/>
</unique-keys>
</entity>
<entity className="io.nop.code.dao.entity.NopCodeCall" displayName="方法调用" i18n-en:displayName="Method Call"
name="io.nop.code.dao.entity.NopCodeCall" registerShortName="true"
tableName="nop_code_call" ext:icon="waypoints">
<columns>
<column code="ID" displayName="ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" tagSet="seq" ui:show="X" stdSqlType="VARCHAR" />
<column code="INDEX_ID" displayName="索引ID" domain="codeId" mandatory="true" name="indexId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="CALLER_ID" displayName="调用方ID" domain="codeId" mandatory="true" name="callerId"
propId="3" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="CALLEE_ID" displayName="被调用方ID" domain="codeId" mandatory="true" name="calleeId"
propId="4" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="FILE_ID" displayName="文件ID" domain="codeId" mandatory="true" name="fileId"
propId="5" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="LINE" displayName="行号" domain="lineNumber" mandatory="true" name="line"
propId="6" stdDataType="int" stdSqlType="INTEGER"/>
<column code="COLUMN" displayName="列号" domain="columnNumber" name="column"
propId="7" stdDataType="int" stdSqlType="INTEGER"/>
<column code="CALL_TYPE" displayName="调用类型" name="callType"
precision="20" propId="8" stdDataType="string" stdSqlType="VARCHAR" ext:dict="code/call_type"/>
<column code="CONTEXT" displayName="上下文" name="context"
precision="2000" propId="9" stdDataType="string" stdSqlType="VARCHAR"/>
</columns>
<comment>方法调用关系</comment>
<relations>
<to-one name="index" refDisplayName="调用" refEntityName="io.nop.code.dao.entity.NopCodeIndex"
refPropName="calls" tagSet="pub">
<join>
<on leftProp="indexId" rightProp="id"/>
</join>
</to-one>
<to-one name="caller" refDisplayName="调用者" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="callees" tagSet="pub">
<join>
<on leftProp="callerId" rightProp="id"/>
</join>
</to-one>
<to-one name="callee" refDisplayName="被调用者" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="callers" tagSet="pub">
<join>
<on leftProp="calleeId" rightProp="id"/>
</join>
</to-one>
<to-one name="file" refDisplayName="调用" refEntityName="io.nop.code.dao.entity.NopCodeFile"
refPropName="calls" tagSet="pub">
<join>
<on leftProp="fileId" rightProp="id"/>
</join>
</to-one>
</relations>
<indexes>
<index name="ix_nop_code_call_caller_id">
<column name="callerId"/>
</index>
<index name="ix_nop_code_call_callee_id">
<column name="calleeId"/>
</index>
<index name="ix_nop_code_call_file_id">
<column name="fileId"/>
</index>
<index name="ix_nop_code_call_index_id">
<column name="indexId"/>
</index>
</indexes>
<unique-keys>
<unique-key columns="indexId,callerId,calleeId,line,column" name="uk_call_unique"/>
</unique-keys>
</entity>
<entity className="io.nop.code.dao.entity.NopCodeInheritance" displayName="继承关系" i18n-en:displayName="Inheritance"
name="io.nop.code.dao.entity.NopCodeInheritance" registerShortName="true"
tableName="nop_code_inheritance" ext:icon="git-branch">
<columns>
<column code="ID" displayName="ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" tagSet="seq" ui:show="X" stdSqlType="VARCHAR" />
<column code="INDEX_ID" displayName="索引ID" domain="codeId" mandatory="true" name="indexId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="SUB_TYPE_ID" displayName="子类型ID" domain="codeId" mandatory="true" name="subTypeId"
propId="3" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="SUPER_TYPE_ID" displayName="父类型ID" domain="codeId" mandatory="true" name="superTypeId"
propId="4" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="RELATION_TYPE" displayName="关系类型" mandatory="true" name="relationType"
precision="20" propId="5" stdDataType="string" stdSqlType="VARCHAR" ext:dict="code/relation_type"/>
</columns>
<comment>
继承关系。relationType: EXTENDS(类继承类/接口继承接口), IMPLEMENTS(类实现接口)
</comment>
<relations>
<to-one name="index" refDisplayName="继承" refEntityName="io.nop.code.dao.entity.NopCodeIndex"
refPropName="inheritances" tagSet="pub">
<join>
<on leftProp="indexId" rightProp="id"/>
</join>
</to-one>
<to-one name="subType" refDisplayName="父类型" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="superTypes" tagSet="pub">
<join>
<on leftProp="subTypeId" rightProp="id"/>
</join>
</to-one>
<to-one name="superType" refDisplayName="子类型" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="subTypes" tagSet="pub">
<join>
<on leftProp="superTypeId" rightProp="id"/>
</join>
</to-one>
</relations>
<indexes>
<index name="ix_nop_code_inheritance_sub_type_id">
<column name="subTypeId"/>
</index>
<index name="ix_nop_code_inheritance_super_type_id">
<column name="superTypeId"/>
</index>
<index name="ix_nop_code_inheritance_index_id">
<column name="indexId"/>
</index>
</indexes>
<unique-keys>
<unique-key columns="indexId,subTypeId,superTypeId,relationType" name="uk_inheritance_unique"/>
</unique-keys>
</entity>
<entity className="io.nop.code.dao.entity.NopCodeAnnotationUsage" displayName="注解使用" i18n-en:displayName="Annotation Usage"
name="io.nop.code.dao.entity.NopCodeAnnotationUsage" registerShortName="true"
tableName="nop_code_annotation_usage" ext:icon="bookmark">
<columns>
<column code="ID" displayName="ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" tagSet="seq" ui:show="X" stdSqlType="VARCHAR" />
<column code="INDEX_ID" displayName="索引ID" domain="codeId" mandatory="true" name="indexId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="ANNOTATION_TYPE_ID" displayName="注解类型ID" domain="codeId" mandatory="true" name="annotationTypeId"
propId="3" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="ANNOTATED_SYMBOL_ID" displayName="被注解符号ID" domain="codeId" name="annotatedSymbolId"
propId="4" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="LINE" displayName="行号" domain="lineNumber" name="line"
propId="5" stdDataType="int" stdSqlType="INTEGER"/>
<column code="COLUMN" displayName="列号" domain="columnNumber" name="column"
propId="6" stdDataType="int" stdSqlType="INTEGER"/>
<column code="ATTRIBUTES" displayName="属性值" domain="jsonContent" name="attributes"
propId="7" stdDataType="string" stdSqlType="VARCHAR" ui:control="textarea"/>
</columns>
<comment>
注解使用记录。attributes存储JSON: {name:value, ...}
</comment>
<relations>
<to-one name="index" refDisplayName="注解使用" refEntityName="io.nop.code.dao.entity.NopCodeIndex"
refPropName="annotationUsages" tagSet="pub">
<join>
<on leftProp="indexId" rightProp="id"/>
</join>
</to-one>
<to-one name="annotationType" refDisplayName="注解使用" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="annotationUsages" tagSet="pub">
<join>
<on leftProp="annotationTypeId" rightProp="id"/>
</join>
</to-one>
<to-one name="annotatedSymbol" refDisplayName="注解使用" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="annotations" tagSet="pub">
<join>
<on leftProp="annotatedSymbolId" rightProp="id"/>
</join>
</to-one>
</relations>
<indexes>
<index name="ix_nop_code_annotation_usage_annotation_type_id">
<column name="annotationTypeId"/>
</index>
<index name="ix_nop_code_annotation_usage_annotated_symbol_id">
<column name="annotatedSymbolId"/>
</index>
<index name="ix_nop_code_annotation_usage_index_id">
<column name="indexId"/>
</index>
</indexes>
<unique-keys>
<unique-key columns="indexId,annotationTypeId,annotatedSymbolId" name="uk_annotation_usage_unique"/>
</unique-keys>
</entity>
文件依赖关系
======================================== -->
<entity className="io.nop.code.dao.entity.NopCodeDependency" displayName="文件依赖" i18n-en:displayName="File Dependency"
name="io.nop.code.dao.entity.NopCodeDependency" registerShortName="true"
tableName="nop_code_dependency" ext:icon="network">
<columns>
<column code="ID" displayName="依赖ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" stdSqlType="VARCHAR" tagSet="seq" ui:show="X"/>
<column code="INDEX_ID" displayName="索引ID" domain="codeId" mandatory="true" name="indexId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="SOURCE_FILE_PATH" displayName="源文件路径" domain="filePath" mandatory="true" name="sourceFilePath"
propId="3" stdDataType="string" stdSqlType="VARCHAR" tagSet="disp"/>
<column code="TARGET_FILE_PATH" displayName="目标文件路径" domain="filePath" name="targetFilePath"
propId="4" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="IMPORT_STATEMENT" displayName="导入语句" name="importStatement"
precision="500" propId="5" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="RESOLVED" displayName="是否已解析" name="resolved"
propId="6" stdDataType="boolean" stdSqlType="BOOLEAN"/>
</columns>
<comment>文件级别的依赖关系,记录源文件导入了哪些目标文件</comment>
<relations>
<to-one name="index" refDisplayName="依赖" refEntityName="io.nop.code.dao.entity.NopCodeIndex"
refPropName="dependencies" tagSet="pub">
<join>
<on leftProp="indexId" rightProp="id"/>
</join>
</to-one>
</relations>
<indexes>
<index name="ix_nop_code_dependency_index_id_source_file_path">
<column name="indexId"/>
<column name="sourceFilePath"/>
</index>
<index name="ix_nop_code_dependency_index_id_target_file_path">
<column name="indexId"/>
<column name="targetFilePath"/>
</index>
</indexes>
</entity>
执行流追踪
======================================== -->
<entity className="io.nop.code.dao.entity.NopCodeFlow" displayName="执行流" i18n-en:displayName="Execution Flow"
name="io.nop.code.dao.entity.NopCodeFlow" registerShortName="true"
tableName="nop_code_flow" ext:icon="route">
<columns>
<column code="ID" displayName="流ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" tagSet="seq" ui:show="X" stdSqlType="VARCHAR"/>
<column code="INDEX_ID" displayName="索引ID" domain="codeId" mandatory="true" name="indexId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="NAME" displayName="流名称" domain="symbolName" name="name"
propId="3" stdDataType="string" stdSqlType="VARCHAR" tagSet="disp"/>
<column code="ENTRY_POINT_ID" displayName="入口符号ID" domain="codeId" name="entryPointId"
propId="4" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="ENTRY_POINT_QUALIFIED_NAME" displayName="入口全限定名" domain="qualifiedName" name="entryPointQualifiedName"
propId="5" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="DEPTH" displayName="最大追踪深度" name="depth"
propId="6" stdDataType="int" stdSqlType="INTEGER"/>
<column code="SYMBOL_COUNT" displayName="符号总数" name="symbolCount"
propId="7" stdDataType="int" stdSqlType="INTEGER"/>
<column code="FILE_SPREAD" displayName="文件扩散评分" name="fileSpread"
propId="8" stdDataType="double" stdSqlType="DOUBLE"/>
<column code="EXTERNAL_SCORE" displayName="外部调用评分" name="externalScore"
propId="9" stdDataType="double" stdSqlType="DOUBLE"/>
<column code="SECURITY_SCORE" displayName="安全敏感评分" name="securityScore"
propId="10" stdDataType="double" stdSqlType="DOUBLE"/>
<column code="TEST_GAP" displayName="测试覆盖缺口评分" name="testGap"
propId="11" stdDataType="double" stdSqlType="DOUBLE"/>
<column code="DEPTH_SCORE" displayName="深度复杂度评分" name="depthScore"
propId="12" stdDataType="double" stdSqlType="DOUBLE"/>
<column code="OVERALL_SCORE" displayName="综合关键度评分" name="overallScore"
propId="13" stdDataType="double" stdSqlType="DOUBLE"/>
<column code="STATUS" displayName="状态" name="status" precision="20"
propId="14" stdDataType="string" stdSqlType="VARCHAR" ext:dict="code/index_status"/>
<column code="CREATED_TIME" displayName="创建时间" name="createTime"
propId="15" stdDataType="timestamp" stdSqlType="DATETIME"/>
<column code="UPDATE_TIME" displayName="更新时间" name="updateTime"
propId="16" stdDataType="timestamp" stdSqlType="DATETIME"/>
<column code="CREATED_BY" displayName="创建人" name="createdBy"
precision="50" propId="17" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="UPDATED_BY" displayName="更新人" name="updatedBy"
precision="50" propId="18" stdDataType="string" stdSqlType="VARCHAR"/>
</columns>
<comment>执行流追踪,记录从入口点出发的调用链路及关键度评分</comment>
<relations>
<to-one name="index" refDisplayName="执行流" refEntityName="io.nop.code.dao.entity.NopCodeIndex"
refPropName="flows" tagSet="pub">
<join>
<on leftProp="indexId" rightProp="id"/>
</join>
</to-one>
<to-one name="entryPoint" refDisplayName="执行流" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="entryFlows" tagSet="pub">
<join>
<on leftProp="entryPointId" rightProp="id"/>
</join>
</to-one>
<to-many cascadeDelete="true" displayName="成员" name="memberships" refEntityName="io.nop.code.dao.entity.NopCodeFlowMembership"
refPropName="flow">
<join>
<on leftProp="id" rightProp="flowId"/>
</join>
</to-many>
</relations>
<indexes>
<index name="ix_nop_code_flow_entry_point_id">
<column name="entryPointId"/>
</index>
<index name="ix_nop_code_flow_index_id_status">
<column name="indexId"/>
<column name="status"/>
</index>
</indexes>
</entity>
<entity className="io.nop.code.dao.entity.NopCodeFlowMembership" displayName="执行流成员" i18n-en:displayName="Execution Flow Membership"
name="io.nop.code.dao.entity.NopCodeFlowMembership" registerShortName="true"
tableName="nop_code_flow_membership" ext:icon="share-2">
<columns>
<column code="ID" displayName="ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" tagSet="seq" ui:show="X" stdSqlType="VARCHAR"/>
<column code="FLOW_ID" displayName="流ID" domain="codeId" mandatory="true" name="flowId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="SYMBOL_ID" displayName="符号ID" domain="codeId" mandatory="true" name="symbolId"
propId="3" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="DEPTH" displayName="深度" name="depth"
propId="4" stdDataType="int" stdSqlType="INTEGER"/>
<column code="IS_ENTRY" displayName="是否入口" name="isEntry"
propId="5" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="CREATED_TIME" displayName="创建时间" name="createTime"
propId="6" stdDataType="timestamp" stdSqlType="DATETIME"/>
<column code="CREATED_BY" displayName="创建人" name="createdBy"
precision="50" propId="7" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="UPDATE_TIME" displayName="更新时间" name="updateTime"
propId="8" stdDataType="timestamp" stdSqlType="DATETIME"/>
<column code="UPDATED_BY" displayName="更新人" name="updatedBy"
precision="50" propId="9" stdDataType="string" stdSqlType="VARCHAR"/>
</columns>
<comment>执行流与符号的多对多关系,记录符号在流中的深度和入口标记</comment>
<relations>
<to-one name="flow" refDisplayName="成员" refEntityName="io.nop.code.dao.entity.NopCodeFlow"
refPropName="memberships" tagSet="pub">
<join>
<on leftProp="flowId" rightProp="id"/>
</join>
</to-one>
<to-one name="symbol" refDisplayName="流成员" refEntityName="io.nop.code.dao.entity.NopCodeSymbol"
refPropName="flowMemberships" tagSet="pub">
<join>
<on leftProp="symbolId" rightProp="id"/>
</join>
</to-one>
</relations>
<indexes>
<index name="ix_nop_code_flow_membership_flow_id">
<column name="flowId"/>
</index>
<index name="ix_nop_code_flow_membership_symbol_id">
<column name="symbolId"/>
</index>
</indexes>
<unique-keys>
<unique-key columns="flowId,symbolId" constraint="UK_NOP_CODE_FLOW_MEMBERSHIP" name="flowSymbolKey"/>
</unique-keys>
</entity>
<entity className="io.nop.code.dao.entity.NopCodeSemanticEdge" displayName="语义边"
name="io.nop.code.dao.entity.NopCodeSemanticEdge" registerShortName="true"
tableName="nop_code_semantic_edge" useLogicalDelete="true" deleteFlagProp="delFlag">
<columns>
<column code="ID" displayName="边ID" domain="codeId" mandatory="true" name="id"
primary="true" propId="1" stdDataType="string" tagSet="seq" ui:show="X" stdSqlType="VARCHAR"/>
<column code="INDEX_ID" displayName="索引ID" domain="codeId" mandatory="true" name="indexId"
propId="2" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="SOURCE_SYMBOL_ID" displayName="源符号ID" domain="codeId" mandatory="true" name="sourceSymbolId"
propId="3" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="TARGET_SYMBOL_ID" displayName="目标符号ID" domain="codeId" mandatory="true" name="targetSymbolId"
propId="4" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="DIRECTED" displayName="有向" name="directed"
propId="5" stdDataType="boolean" stdSqlType="BOOLEAN"/>
<column code="RELATION_TYPE" displayName="关系类型" mandatory="true" name="relationType"
precision="40" propId="6" stdDataType="string" stdSqlType="VARCHAR" ext:dict="code/relation_type"/>
<column code="CONFIDENCE" displayName="置信度级别" mandatory="true" name="confidence"
propId="7" stdDataType="int" stdSqlType="INTEGER"/>
<column code="CONFIDENCE_SCORE" displayName="置信度分数" name="confidenceScore"
propId="8" stdDataType="double" stdSqlType="DOUBLE"/>
<column code="RATIONALE" displayName="原因" name="rationale"
precision="500" propId="9" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="EXTRACTOR_ID" displayName="提取器ID" name="extractorId"
precision="40" propId="10" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="EXT_DATA" displayName="扩展数据" domain="jsonContent" name="extData"
propId="11" stdDataType="string" stdSqlType="VARCHAR" ui:control="textarea"/>
<column code="CREATED_BY" displayName="创建人" name="createdBy"
propId="12" stdDataType="string" stdSqlType="VARCHAR"/>
<column code="CREATE_TIME" displayName="创建时间" name="createTime"
propId="13" stdDataType="timestamp" stdSqlType="DATETIME"/>
<column code="DEL_FLAG" displayName="逻辑删除" name="delFlag" precision="1"
propId="14" stdDataType="boolean" stdSqlType="TINYINT" stdDomain="boolFlag"/>
</columns>
<indexes>
<index name="ix_nop_code_semantic_edge_index_id">
<column name="indexId"/>
</index>
<index name="ix_nop_code_semantic_edge_source_symbol_id">
<column name="sourceSymbolId"/>
</index>
<index name="ix_nop_code_semantic_edge_target_symbol_id">
<column name="targetSymbolId"/>
</index>
<index name="ix_nop_code_semantic_edge_relation_type">
<column name="relationType"/>
</index>
</indexes>
<relations>
<to-one name="index" refDisplayName="语义边" refEntityName="io.nop.code.dao.entity.NopCodeIndex"
refPropName="semanticEdges" tagSet="pub">
<join>
<on leftProp="indexId" rightProp="id"/>
</join>
</to-one>
<to-one name="sourceSymbol" refDisplayName="源符号边" refEntityName="io.nop.code.dao.entity.NopCodeSymbol" tagSet="pub">
<join>
<on leftProp="sourceSymbolId" rightProp="id"/>
</join>
</to-one>
<to-one name="targetSymbol" refDisplayName="目标符号边" refEntityName="io.nop.code.dao.entity.NopCodeSymbol" tagSet="pub">
<join>
<on leftProp="targetSymbolId" rightProp="id"/>
</join>
</to-one>
</relations>
<unique-keys>
<unique-key columns="indexId,sourceSymbolId,targetSymbolId,relationType" name="uk_semantic_edge_unique"/>
</unique-keys>
</entity>
</entities>
</orm>