Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
488 changes: 283 additions & 205 deletions go/src/lqp/v1/transactions.pb.go

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions go/src/print.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,12 @@ func (pp PrettyParams) pprint(node interface{}) {
levelStr = strings.ToLower(strings.TrimPrefix(levelStr, "MAINTENANCE_LEVEL_"))
configDict["ivm.maintenance_level"] = levelStr
}
optimization_level := n.GetOptimizationLevel()
if optimization_level != pb.OptimizationLevel_OPTIMIZATION_LEVEL_UNSPECIFIED{
levelStr := optimization_level.String()
levelStr = strings.ToLower(strings.TrimPrefix(levelStr, "OPTIMIZATION_LEVEL_"))
configDict["optimization_level"] = levelStr
}
}
pp.PARENS(func(pp PrettyParams) {
pp.Write("configure")
Expand Down
25 changes: 21 additions & 4 deletions julia/LQPParser/src/parser.jl
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ end
function default_configure(parser::Parser)::Proto.Configure
_t969 = Proto.IVMConfig(level=Proto.MaintenanceLevel.MAINTENANCE_LEVEL_OFF)
ivm_config = _t969
_t970 = Proto.Configure(semantics_version=0, ivm_config=ivm_config)
_t970 = Proto.Configure(0, ivm_config, Proto.OptimizationLevel.OPTIMIZATION_LEVEL_DEFAULT)
return _t970
end

Expand All @@ -500,7 +500,24 @@ function construct_configure(parser::Parser, config_dict::Vector{Tuple{String, P
ivm_config = _t971
_t972 = _extract_value_int64(parser, get(config, "semantics_version", nothing), 0)
semantics_version = _t972
_t973 = Proto.Configure(semantics_version=semantics_version, ivm_config=ivm_config)
optimization_level_val = get(config, "optimization_level", nothing)
optimization_level = Proto.OptimizationLevel.OPTIMIZATION_LEVEL_DEFAULT
if (!isnothing(optimization_level_val) && _has_proto_field(optimization_level_val, Symbol("string_value")))
if _get_oneof_field(optimization_level_val, :string_value) == "default"
optimization_level = Proto.OptimizationLevel.OPTIMIZATION_LEVEL_DEFAULT
else
if _get_oneof_field(optimization_level_val, :string_value) == "conservative"
optimization_level = Proto.OptimizationLevel.OPTIMIZATION_LEVEL_CONSERVATIVE
else
if _get_oneof_field(optimization_level_val, :string_value) == "aggressive"
optimization_level = Proto.OptimizationLevel.OPTIMIZATION_LEVEL_AGGRESSIVE
else
optimization_level = Proto.OptimizationLevel.OPTIMIZATION_LEVEL_DEFAULT
end
end
end
end
_t973 = Proto.Configure(semantics_version, ivm_config, optimization_level)
return _t973
end

Expand Down Expand Up @@ -2863,8 +2880,8 @@ function parse_constraint(parser::Parser)::Proto.Constraint
_t850 = parse_functional_dependency_values(parser)
functional_dependency_values260 = _t850
consume_literal!(parser, ")")
_t851 = Proto.FunctionalDependency(guard=abstraction258, keys=functional_dependency_keys259, values=functional_dependency_values260)
_t852 = Proto.Constraint(constraint_type=OneOf(:functional_dependency, _t851), name=relation_id257)
_t851 = Proto.FunctionalDependency(abstraction258, functional_dependency_keys259, functional_dependency_values260)
_t852 = Proto.Constraint(relation_id257, OneOf(:functional_dependency, _t851))
return _t852
end

Expand Down
4 changes: 2 additions & 2 deletions julia/LQPParser/src/relationalai/lqp/v1/fragments_pb.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Autogenerated using ProtoBuf.jl v1.2.0 on 2026-02-09T13:12:21.756
# original file: /Users/nystrom/rai/nn-meta-12-go-tools/proto/relationalai/lqp/v1/fragments.proto (proto3 syntax)
# Autogenerated using ProtoBuf.jl v1.2.0 on 2026-02-11T12:34:20.995
# original file: /home/berkay/logical-query-protocol/proto/relationalai/lqp/v1/fragments.proto (proto3 syntax)

import ProtoBuf as PB
using ProtoBuf: OneOf
Expand Down
4 changes: 2 additions & 2 deletions julia/LQPParser/src/relationalai/lqp/v1/logic_pb.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Autogenerated using ProtoBuf.jl v1.2.0 on 2026-02-09T13:12:21.246
# original file: /Users/nystrom/rai/nn-meta-12-go-tools/proto/relationalai/lqp/v1/logic.proto (proto3 syntax)
# Autogenerated using ProtoBuf.jl v1.2.0 on 2026-02-11T12:34:20.266
# original file: /home/berkay/logical-query-protocol/proto/relationalai/lqp/v1/logic.proto (proto3 syntax)

import ProtoBuf as PB
using ProtoBuf: OneOf
Expand Down
26 changes: 17 additions & 9 deletions julia/LQPParser/src/relationalai/lqp/v1/transactions_pb.jl
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# Autogenerated using ProtoBuf.jl v1.2.0 on 2026-02-09T13:12:21.756
# original file: /Users/nystrom/rai/nn-meta-12-go-tools/proto/relationalai/lqp/v1/transactions.proto (proto3 syntax)
# Autogenerated using ProtoBuf.jl v1.2.0 on 2026-02-11T12:34:20.995
# original file: /home/berkay/logical-query-protocol/proto/relationalai/lqp/v1/transactions.proto (proto3 syntax)

import ProtoBuf as PB
using ProtoBuf: OneOf
using ProtoBuf.EnumX: @enumx

export ExportCSVColumn, Demand, Undefine, MaintenanceLevel, Define, Context, Sync, Abort
export Output, ExportCSVConfig, IVMConfig, Write, Export, Configure, Epoch, Read
export Transaction, WhatIf
export ExportCSVColumn, Demand, OptimizationLevel, Undefine, MaintenanceLevel, Define
export Context, Sync, Abort, Output, ExportCSVConfig, IVMConfig, Write, Export, Configure
export Epoch, Read, Transaction, WhatIf
abstract type var"##Abstract#Transaction" end
abstract type var"##Abstract#Epoch" end
abstract type var"##Abstract#Read" end
Expand Down Expand Up @@ -82,6 +82,8 @@ function PB._encoded_size(x::Demand)
return encoded_size
end

@enumx OptimizationLevel OPTIMIZATION_LEVEL_UNSPECIFIED=0 OPTIMIZATION_LEVEL_DEFAULT=1 OPTIMIZATION_LEVEL_CONSERVATIVE=2 OPTIMIZATION_LEVEL_AGGRESSIVE=3

struct Undefine
fragment_id::Union{Nothing,FragmentId}
end
Expand Down Expand Up @@ -488,37 +490,43 @@ end
struct Configure
semantics_version::Int64
ivm_config::Union{Nothing,IVMConfig}
optimization_level::OptimizationLevel.T
end
Configure(;semantics_version = zero(Int64), ivm_config = nothing) = Configure(semantics_version, ivm_config)
PB.default_values(::Type{Configure}) = (;semantics_version = zero(Int64), ivm_config = nothing)
PB.field_numbers(::Type{Configure}) = (;semantics_version = 1, ivm_config = 2)
Configure(;semantics_version = zero(Int64), ivm_config = nothing, optimization_level = OptimizationLevel.OPTIMIZATION_LEVEL_UNSPECIFIED) = Configure(semantics_version, ivm_config, optimization_level)
PB.default_values(::Type{Configure}) = (;semantics_version = zero(Int64), ivm_config = nothing, optimization_level = OptimizationLevel.OPTIMIZATION_LEVEL_UNSPECIFIED)
PB.field_numbers(::Type{Configure}) = (;semantics_version = 1, ivm_config = 2, optimization_level = 3)

function PB.decode(d::PB.AbstractProtoDecoder, ::Type{<:Configure})
semantics_version = zero(Int64)
ivm_config = Ref{Union{Nothing,IVMConfig}}(nothing)
optimization_level = OptimizationLevel.OPTIMIZATION_LEVEL_UNSPECIFIED
while !PB.message_done(d)
field_number, wire_type = PB.decode_tag(d)
if field_number == 1
semantics_version = PB.decode(d, Int64)
elseif field_number == 2
PB.decode!(d, ivm_config)
elseif field_number == 3
optimization_level = PB.decode(d, OptimizationLevel.T)
else
Base.skip(d, wire_type)
end
end
return Configure(semantics_version, ivm_config[])
return Configure(semantics_version, ivm_config[], optimization_level)
end

function PB.encode(e::PB.AbstractProtoEncoder, x::Configure)
initpos = position(e.io)
x.semantics_version != zero(Int64) && PB.encode(e, 1, x.semantics_version)
!isnothing(x.ivm_config) && PB.encode(e, 2, x.ivm_config)
x.optimization_level != OptimizationLevel.OPTIMIZATION_LEVEL_UNSPECIFIED && PB.encode(e, 3, x.optimization_level)
return position(e.io) - initpos
end
function PB._encoded_size(x::Configure)
encoded_size = 0
x.semantics_version != zero(Int64) && (encoded_size += PB._encoded_size(x.semantics_version, 1))
!isnothing(x.ivm_config) && (encoded_size += PB._encoded_size(x.ivm_config, 2))
x.optimization_level != OptimizationLevel.OPTIMIZATION_LEVEL_UNSPECIFIED && (encoded_size += PB._encoded_size(x.optimization_level, 3))
return encoded_size
end

Expand Down
8 changes: 8 additions & 0 deletions proto/relationalai/lqp/v1/transactions.proto
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ message Transaction {
message Configure {
int64 semantics_version = 1;
IVMConfig ivm_config = 2;
OptimizationLevel optimization_level = 3;
}

message IVMConfig {
Expand All @@ -29,6 +30,13 @@ enum MaintenanceLevel {
MAINTENANCE_LEVEL_ALL = 3;
}

enum OptimizationLevel {
OPTIMIZATION_LEVEL_UNSPECIFIED = 0;
OPTIMIZATION_LEVEL_DEFAULT = 1;
OPTIMIZATION_LEVEL_CONSERVATIVE = 2;
OPTIMIZATION_LEVEL_AGGRESSIVE = 3;
}

message Sync {
repeated FragmentId fragments = 1;
}
Expand Down
6 changes: 5 additions & 1 deletion python-tools/src/lqp/emit.py
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,8 @@ def convert_epoch(e: ir.Epoch) -> transactions_pb2.Epoch:
def convert_configure(c: ir.Configure) -> transactions_pb2.Configure:
return transactions_pb2.Configure(
semantics_version=c.semantics_version,
ivm_config=convert_ivm_config(c.ivm_config)
ivm_config=convert_ivm_config(c.ivm_config),
optimization_level=convert_optimization_level(c.optimization_level)
)

def convert_ivm_config(c: ir.IVMConfig) -> transactions_pb2.IVMConfig:
Expand All @@ -542,6 +543,9 @@ def convert_ivm_config(c: ir.IVMConfig) -> transactions_pb2.IVMConfig:
def convert_maintenance_level(l: ir.MaintenanceLevel) -> transactions_pb2.MaintenanceLevel:
return transactions_pb2.MaintenanceLevel.Name(l.value) # type: ignore[missing-attribute]

def convert_optimization_level(o: ir.OptimizationLevel) -> transactions_pb2.OptimizationLevel:
return transactions_pb2.OptimizationLevel.Name(o.value) # type: ignore[missing-attribute]

def convert_sync(c: ir.Sync) -> transactions_pb2.Sync:
return transactions_pb2.Sync(fragments=[convert_fragment_id(rid) for rid in c.fragments])

Expand Down
17 changes: 15 additions & 2 deletions python-tools/src/lqp/generated_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,7 @@ def construct_betree_info(key_types: list[logic_pb2.Type], value_types: list[log
def default_configure() -> transactions_pb2.Configure:
_t969 = transactions_pb2.IVMConfig(level=transactions_pb2.MaintenanceLevel.MAINTENANCE_LEVEL_OFF)
ivm_config = _t969
_t970 = transactions_pb2.Configure(semantics_version=0, ivm_config=ivm_config)
_t970 = transactions_pb2.Configure(semantics_version=0, ivm_config=ivm_config, optimization_level=transactions_pb2.OptimizationLevel.OPTIMIZATION_LEVEL_DEFAULT)
return _t970

@staticmethod
Expand All @@ -428,7 +428,20 @@ def construct_configure(config_dict: list[tuple[str, logic_pb2.Value]]) -> trans
ivm_config = _t971
_t972 = Parser._extract_value_int64(config.get('semantics_version'), 0)
semantics_version = _t972
_t973 = transactions_pb2.Configure(semantics_version=semantics_version, ivm_config=ivm_config)
optimization_level_val = config.get('optimization_level')
optimization_level = transactions_pb2.OptimizationLevel.OPTIMIZATION_LEVEL_DEFAULT
if (optimization_level_val is not None and optimization_level_val.HasField('string_value')):
if optimization_level_val.string_value == 'default':
optimization_level = transactions_pb2.OptimizationLevel.OPTIMIZATION_LEVEL_DEFAULT
else:
if optimization_level_val.string_value == 'conservative':
optimization_level = transactions_pb2.OptimizationLevel.OPTIMIZATION_LEVEL_CONSERVATIVE
else:
if optimization_level_val.string_value == 'aggressive':
optimization_level = transactions_pb2.OptimizationLevel.OPTIMIZATION_LEVEL_AGGRESSIVE
else:
optimization_level = transactions_pb2.OptimizationLevel.OPTIMIZATION_LEVEL_DEFAULT
_t973 = transactions_pb2.Configure(semantics_version=semantics_version, ivm_config=ivm_config, optimization_level=optimization_level)
return _t973

@staticmethod
Expand Down
10 changes: 10 additions & 0 deletions python-tools/src/lqp/ir.py
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,7 @@ class Transaction(LqpNode):
class Configure(LqpNode):
semantics_version: int
ivm_config: IVMConfig
optimization_level: OptimizationLevel

# Sync(fragments::FragmentId[])
@dataclass(frozen=True)
Expand All @@ -552,3 +553,12 @@ class MaintenanceLevel(Enum):

def __str__(self) -> str:
return self.name

class OptimizationLevel(Enum):
UNSPECIFIED = 0
DEFAULT = 1
CONSERVATIVE = 2
AGGRESSIVE = 3

def __str__(self) -> str:
return self.name
11 changes: 10 additions & 1 deletion python-tools/src/lqp/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,16 +178,25 @@ def construct_configure(config_dict, meta):
maintenance_level = ir.MaintenanceLevel.OFF
ivm_config = ir.IVMConfig(level=maintenance_level, meta=meta)

# Construct Configure
# Get optimization level
optimization_level_value = config_dict.get("optimization_level")
if optimization_level_value:
optimization_level = getattr(ir.OptimizationLevel, optimization_level_value.value.upper())
else:
optimization_level = ir.OptimizationLevel.DEFAULT

# Get semantics_version
semantics_version_value = config_dict.get("semantics_version")
if semantics_version_value:
semantics_version = semantics_version_value.value
else:
semantics_version = 0

# Construct & return Configure
return ir.Configure(
semantics_version=semantics_version,
ivm_config=ivm_config,
optimization_level=optimization_level,
meta=meta,
)

Expand Down
2 changes: 2 additions & 0 deletions python-tools/src/lqp/print.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ def program_to_str(node: ir.Transaction, options: Dict = {}) -> str:
config_dict["semantics_version"] = config.semantics_version
if config.ivm_config.level != ir.MaintenanceLevel.UNSPECIFIED:
config_dict["ivm.maintenance_level"] = config.ivm_config.level.name.lower()
if config.optimization_level != ir.OptimizationLevel.UNSPECIFIED:
config_dict["optimization_level"] = config.optimization_level.name.lower()

s += "\n" + conf.indentation(1) + conf.LPAREN() + conf.kw("configure") + "\n"
s += config_dict_to_str(config_dict, 2, options)
Expand Down
Loading
Loading