Skip to main content

Crate plsql_ir

Crate plsql_ir 

Source
Expand description

Typed semantic intermediate representation (IR) for plsql-intelligence.

The IR is one step removed from the raw AST emitted by plsql-parser: the AST is syntactic, the IR is semantic. Downstream product surfaces (lineage, SAST, docs, bindgen, CI/CD) consume the IR rather than re-walking ASTs, so name resolution, overload selection, and Oracle catalog cross-checking happen in one place.

introduces the top-level container types: SemanticModel, FileModel, and SchemaModel. adds the Declaration enum and its variant payloads in the decl module. Statement lowering arrives in.

Re-exports§

pub use calls::CallContext;
pub use calls::CallSite;
pub use calls::extract_call_sites;
pub use calls::extract_call_sites_bounded;
pub use canonical::CanonicalisationContext;
pub use canonical::CanonicalisationStats;
pub use canonical::canonicalize_expr;
pub use canonical::canonicalize_statements;
pub use column_edges::ColumnEdge;
pub use column_edges::ColumnEdgeKind;
pub use column_edges::extract_column_edges;
pub use column_edges::extract_column_edges_for_model;
pub use dml_edges::AccessKind;
pub use dml_edges::TableAccess;
pub use dml_edges::extract_table_accesses;
pub use dml_edges::extract_table_accesses_bounded;
pub use expr::Expr;
pub use expr::NameRef;
pub use expr::UnknownExprReason;
pub use expr::lower_expression;
pub use fact::Fact;
pub use fact::FactId;
pub use fact::FactKind;
pub use fact::FactPayload;
pub use fact::FactProvenance;
pub use fact::FactStore;
pub use fact::mint_fact;
pub use fact_emit::emit_call_facts;
pub use fact_emit::emit_declaration_facts;
pub use fact_emit::emit_declarations_from;
pub use fact_emit::emit_dynamic_sql_facts;
pub use fact_emit::emit_flow_env_facts;
pub use fact_emit::emit_flow_facts;
pub use fact_emit::emit_privilege_facts;
pub use fact_emit::emit_reference_facts;
pub use fact_emit::emit_unknown_facts;
pub use flow::ConstantValue;
pub use flow::StringShape;
pub use flow::Taint;
pub use flow::TaintCleanser;
pub use flow::TaintKind;
pub use flow::ValueFlow;
pub use flow::ValueSet;
pub use flow_inter::CallEdgeFlow;
pub use flow_inter::FlowUnknownFact;
pub use flow_inter::InterFlowResult;
pub use flow_inter::RoutineFlowSummary;
pub use flow_inter::propagate_inter;
pub use flow_intra::FlowEnv;
pub use flow_intra::TaintSources;
pub use flow_intra::analyze_flow;
pub use flow_intra::analyze_flow_bounded;
pub use flow_query::FlowQuery;
pub use flow_query::TaintAnswer;
pub use lower::LoweredFile;
pub use lower::lower_top_level;
pub use recursion_guard::MAX_RELOWER_DEPTH;
pub use recursion_guard::RecursionOutcome;
pub use sql_columns::extract_columns;
pub use sql_columns::extract_columns_for_model;
pub use sql_fact_emit::emit_sql_use_facts;
pub use sql_fact_emit::emit_sql_use_facts_for_model;
pub use sql_resolve::resolve_sql;
pub use sql_sem::AliasBinding;
pub use sql_sem::AliasScope;
pub use sql_sem::ColumnResolution;
pub use sql_sem::ColumnUse;
pub use sql_sem::ProjectionItem;
pub use sql_sem::SqlSemanticModel;
pub use sql_sem::SqlSemanticVerb;
pub use sql_sem::SqlStatementModel;
pub use sql_sem::TableUsageKind;
pub use sql_sem::TableUse;
pub use stmt::IfArm;
pub use stmt::SqlVerb;
pub use stmt::Statement;
pub use stmt::UnknownStatementReason;
pub use stmt::lower_statement_body;
pub use table_stub::DeclLike;
pub use decl::AnchoredType;
pub use decl::ColumnDecl;
pub use decl::CursorDecl;
pub use decl::DeclCommon;
pub use decl::DeclKind;
pub use decl::Declaration;
pub use decl::FunctionDecl;
pub use decl::IndexDecl;
pub use decl::PackageDecl;
pub use decl::ParamDecl;
pub use decl::ParamMode;
pub use decl::ProcedureDecl;
pub use decl::SequenceDecl;
pub use decl::SynonymDecl;
pub use decl::TableDecl;
pub use decl::TriggerDecl;
pub use decl::TypeDecl;
pub use decl::TypeRef;
pub use decl::VariableDecl;
pub use decl::ViewDecl;

Modules§

calls
Call-site edge extraction.
canonical
IR canonicalization.
column_edges
Column-level edge extraction.
decl
Declaration variants populated by AST→IR lowering.
dml_edges
Reads / Writes edge extraction at the table level.
expr
IR for PL/SQL expressions and name references.
fact
Normalized fact schema.
fact_emit
Emit declaration / reference / call facts plus privilege / dynamic-SQL / unknown facts.
flow
Value-flow, taint, constant, value-set, and string-shape models.
flow_inter
Single-hop inter-procedural parameter/return flow.
flow_intra
Intra-procedural assignment + expression flow.
flow_query
Taint-path + string-shape query API.
lower
AST → IR lowering for top-level declarations.
recursion_guard
Bounded-depth guard for the re-lowering walks.
sql_columns
Projection + column read/write extraction.
sql_fact_emit
Emit SQL table/column-use facts with precision markers.
sql_resolve
Table / alias resolution for embedded SQL.
sql_sem
Semantic model for embedded SQL statements.
stmt
IR for PL/SQL statement bodies.
table_stub
Layering shim for fact emission (support).

Structs§

DeclId
Stable identity for a semantic declaration (procedure, function, package, type, variable, parameter, cursor, table, view, column, sequence, synonym, index, trigger). The concrete Declaration enum lands in PLSQL-IR-002.
FileModel
Per-source-file IR view.
SchemaModel
Per-schema IR view.
SemanticModel
Top-level container produced by Layer 2 semantic analysis.
StatementId
Stable identity for an IR statement node. The statement enum lands in PLSQL-IR-004; the embedded-SQL view in PLSQL-SQLSEM-001.