def test_materialized_from_obj_maybe_materialize(db_engine_with_events_table): from_obj = FromObj(from_obj="events", name="myquery", knowledge_date_column='event_date') from_obj.should_materialize = lambda: True from_obj.maybe_materialize(db_engine_with_events_table) assert table_exists(from_obj.table, db_engine_with_events_table)
def test_materialized_from_obj_should_materialize_subquery(): from_obj = FromObj( from_obj= "(select entity_id, date from mytable1 join entities using(entity_id)) joined_events", name="events", knowledge_date_column="date") assert from_obj.should_materialize() assert from_obj.table == "events_from_obj"
def test_materialized_from_obj_should_handle_leading_whitespace(): q = """ ( SELECT entity_id, date from mytable1 join entities using (entity_id) ) AS joined_events""" from_obj = FromObj(from_obj=q, name="events", knowledge_date_column="date") assert from_obj.should_materialize() assert from_obj.table == "events_from_obj"
def test_materialized_from_obj_validate_needs_knowledge_date( db_engine_with_events_table): from_obj = FromObj( from_obj= "(select entity_id from events where event_date < '2016-01-01') from_obj", name="myquery", knowledge_date_column='event_date') db_engine_with_events_table.execute(from_obj.create_materialized_table_sql) with pytest.raises(ValueError): from_obj.validate(db_engine_with_events_table)
def test_materialized_from_obj_create(): materialized_query = FromObj( from_obj='events where event_date < "2016-01-01"', name="myquery", knowledge_date_column='knowledge_date') assert materialized_query.create_materialized_table_sql == 'create table myquery_from_obj as ' +\ '(select * from events where event_date < "2016-01-01")'
def preprocess_aggregation(self, aggregation): create_schema = aggregation.get_create_schema() if create_schema is not None: with self.db_engine.begin() as conn: conn.execute(create_schema) if self.materialize_subquery_fromobjs: # materialize from obj from_obj = FromObj( from_obj=aggregation.from_obj.text, name=f"{aggregation.schema}.{aggregation.prefix}", knowledge_date_column=aggregation.date_column) from_obj.maybe_materialize(self.db_engine) aggregation.from_obj = from_obj.table return aggregation
def test_materialized_from_obj_should_not_materialize_tbl(): from_obj = FromObj(from_obj="mytable1", name="events", knowledge_date_column="date") assert not from_obj.should_materialize() assert from_obj.table == "mytable1"
def test_materialized_from_obj_validate_success(db_engine_with_events_table): from_obj = FromObj(from_obj="events where event_date < '2016-01-01'", name="myquery", knowledge_date_column='event_date') db_engine_with_events_table.execute(from_obj.create_materialized_table_sql) from_obj.validate(db_engine_with_events_table)
def test_materialized_from_obj_drop(): materialized_query = FromObj( from_obj='events where event_date < "2016-01-01"', name="myquery", knowledge_date_column='knowledge_date') assert materialized_query.drop_materialized_table_sql == 'drop table if exists myquery_from_obj'
def test_materialized_from_obj_index(): materialized_query = FromObj( from_obj='events where event_date < "2016-01-01"', name="myquery", knowledge_date_column='knowledge_date') assert materialized_query.index_materialized_table_sql == 'create index on myquery_from_obj (knowledge_date)'
def test_materialized_from_obj_should_handle_keywords(): from_obj = FromObj(from_obj="events", name="events", knowledge_date_column="date") assert not from_obj.should_materialize() assert from_obj.table == "events"
def test_materialized_from_obj_should_not_materialize_join(): from_obj = FromObj(from_obj="mytable1 join entities using(entity_id)", name="events", knowledge_date_column="date") assert not from_obj.should_materialize() assert from_obj.table == "mytable1 join entities using(entity_id)"