47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
"""
|
|
Main entry point for PySECONDO package
|
|
"""
|
|
|
|
from .repl import REPL
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
repl = REPL()
|
|
if len(sys.argv) > 1 and sys.argv[1] == "--test":
|
|
# Run test mode
|
|
from pysecondo.storage.memory import MemoryStorage
|
|
from pysecondo.algebras.base import AlgebraManager
|
|
from pysecondo.algebras.standard import StandardAlgebra
|
|
from pysecondo.algebras.relation import RelationAlgebra
|
|
from pysecondo.parser.parser import Parser
|
|
from pysecondo.parser.evaluator import Evaluator
|
|
from pysecondo.core.types import parse_type
|
|
from pysecondo.core.nested_list import list_nl
|
|
|
|
storage = MemoryStorage()
|
|
algebra_manager = AlgebraManager()
|
|
algebra_manager.register_algebra("StandardAlgebra", StandardAlgebra())
|
|
algebra_manager.register_algebra(
|
|
"RelationAlgebra", RelationAlgebra(storage))
|
|
|
|
parser = Parser()
|
|
evaluator = Evaluator(algebra_manager, storage)
|
|
|
|
# Create test data
|
|
cities_type = parse_type(
|
|
'(rel (tuple ((Name string)(Population int))))')
|
|
cities_data = list_nl(
|
|
list_nl("Beijing", 21540000),
|
|
list_nl("Shanghai", 24280000),
|
|
list_nl("Guangzhou", 14040000),
|
|
)
|
|
storage.create_object("cities", cities_data, cities_type)
|
|
|
|
# Run test query
|
|
print("Test: query cities feed count")
|
|
tokens = parser.parse_expression("cities feed count")
|
|
value, _ = evaluator.evaluate(tokens)
|
|
print(f"Result: {value.to_python()}")
|
|
else:
|
|
repl.run()
|