static void test_fact_store_transaction_push_pop (void) { OhmFactStore* fs; fs = ohm_fact_store_new (); ohm_fact_store_transaction_pop (fs, FALSE); ohm_fact_store_transaction_push (fs); ohm_fact_store_transaction_push (fs); ohm_fact_store_transaction_push (fs); ohm_fact_store_transaction_pop (fs, FALSE); ohm_fact_store_transaction_pop (fs, FALSE); { gint i; i = 0; for (; i < 100; i++) { ohm_fact_store_transaction_push (fs); } } { gint i; i = 0; for (; i < 100; i++) { ohm_fact_store_transaction_pop (fs, FALSE); } } ohm_fact_store_transaction_pop (fs, FALSE); (fs == NULL ? NULL : (fs = (g_object_unref (fs), NULL))); }
static void test_fact_store_transaction_push_and_watch (void) { OhmFactStore* fs; OhmFact* fact; fs = ohm_fact_store_new (); ohm_fact_store_transaction_push (fs); fact = ohm_fact_new ("org.test.match"); ohm_fact_set (fact, "field", ohm_value_from_int (42)); ohm_fact_store_insert (fs, fact); g_assert (g_slist_length (ohm_fact_store_get_facts_by_name (fs, "org.test.match")) == 1); ohm_fact_set (fact, "field", ohm_value_from_int (43)); ohm_fact_store_transaction_pop (fs, FALSE); g_assert (g_slist_length (ohm_fact_store_get_facts_by_name (fs, "org.test.match")) == 1); ohm_fact_store_transaction_push (fs); ohm_fact_store_transaction_push (fs); ohm_fact_store_remove (fs, fact); ohm_fact_store_transaction_pop (fs, FALSE); ohm_fact_store_transaction_pop (fs, FALSE); g_assert (g_slist_length (ohm_fact_store_get_facts_by_name (fs, "org.test.match")) == 0); (fs == NULL ? NULL : (fs = (g_object_unref (fs), NULL))); (fact == NULL ? NULL : (fact = (g_object_unref (fact), NULL))); }
int dres_store_tx_commit(dres_t *dres) { dres_store_t *store = &dres->store; ohm_fact_store_transaction_pop(store->fs, FALSE); DRES_CLR_FLAG(dres, TRANSACTION_ACTIVE); DEBUG(DBG_VAR, "committed transaction"); return TRUE; }
int dres_store_tx_rollback(dres_t *dres) { dres_store_t *store = &dres->store; dres_target_t *t; dres_variable_t *var; int i; ohm_fact_store_transaction_pop(store->fs, TRUE); DRES_CLR_FLAG(dres, TRANSACTION_ACTIVE); for (i = 0, t = dres->targets; i < dres->ntarget; i++, t++) if (t->txid == dres->txid) t->stamp = t->txstamp; for (i = 0, var = dres->dresvars; i < dres->ndresvar; i++, var++) if (var->txid == dres->txid) var->stamp = var->txstamp; DEBUG(DBG_VAR, "rolled back transaction"); return TRUE; }
static void test_fact_store_transaction_push_and_commit (void) { OhmFactStore* fs; OhmFactStoreView* v; OhmFactStoreView* v2; OhmFactStoreView* tpv; OhmPattern* _tmp0; OhmPattern* _tmp1; OhmFact* fact; GValue* val; fs = ohm_fact_store_new (); v = ohm_fact_store_new_view (fs, NULL); v2 = ohm_fact_store_new_view (fs, NULL); tpv = ohm_fact_store_new_transparent_view (fs, NULL); _tmp0 = NULL; ohm_fact_store_view_add (v, OHM_STRUCTURE ((_tmp0 = ohm_pattern_new ("org.test.match")))); (_tmp0 == NULL ? NULL : (_tmp0 = (g_object_unref (_tmp0), NULL))); _tmp1 = NULL; ohm_fact_store_view_add (v2, OHM_STRUCTURE ((_tmp1 = ohm_pattern_new ("org.freedesktop.hello")))); (_tmp1 == NULL ? NULL : (_tmp1 = (g_object_unref (_tmp1), NULL))); _tmp1 = NULL; ohm_fact_store_view_add (tpv, OHM_STRUCTURE ((_tmp1 = ohm_pattern_new ("org.test.match")))); (_tmp1 == NULL ? NULL : (_tmp1 = (g_object_unref (_tmp1), NULL))); _tmp1 = NULL; /* insertion*/ ohm_fact_store_transaction_push (fs); { fact = ohm_fact_new ("org.test.match"); ohm_fact_set (fact, "field", ohm_value_from_int (42)); ohm_fact_store_insert (fs, fact); g_assert (g_slist_length (ohm_fact_store_get_facts_by_name (fs, "org.test.match")) == 1); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (v)->change_set)) == 0); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (tpv)->change_set)) == 1); } ohm_fact_store_transaction_pop (fs, FALSE); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (v)->change_set)) == 1); /* and from the fact store*/ g_assert (g_slist_length (ohm_fact_store_get_facts_by_name (fs, "org.test.match")) == 1); ohm_fact_set (fact, "field", ohm_value_from_int (43)); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (v)->change_set)) == 2); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (tpv)->change_set)) == 2); ohm_fact_store_transaction_push (fs); { ohm_fact_store_remove (fs, fact); g_assert (g_slist_length (ohm_fact_store_get_facts_by_name (fs, "org.test.match")) == 0); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (v)->change_set)) == 2); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (tpv)->change_set)) == 3); } ohm_fact_store_transaction_pop (fs, FALSE); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (v)->change_set)) == 3); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (tpv)->change_set)) == 3); g_assert (g_slist_length (ohm_fact_store_get_facts_by_name (fs, "org.test.match")) == 0); /* update*/ fact = ohm_fact_new ("org.test.match"); ohm_fact_set (fact, "field", ohm_value_from_int (41)); ohm_fact_store_insert (fs, fact); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (v)->change_set)) == 4); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (tpv)->change_set)) == 4); ohm_fact_store_transaction_push (fs); { GValue* val; val = ((GValue*) ohm_fact_get (fact, "field")); g_assert (g_value_get_int (val) == 41); ohm_fact_set (fact, "field", ohm_value_from_int (42)); val = ((GValue*) ohm_fact_get (fact, "field")); g_assert (g_value_get_int (val) == 42); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (v)->change_set)) == 4); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (tpv)->change_set)) == 5); } ohm_fact_store_transaction_pop (fs, FALSE); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (v)->change_set)) == 5); g_assert (g_slist_length (ohm_fact_store_change_set_get_matches (OHM_FACT_STORE_SIMPLE_VIEW (tpv)->change_set)) == 5); val = ((GValue*) ohm_fact_get (fact, "field")); g_assert (g_value_get_int (val) == 42); (fs == NULL ? NULL : (fs = (g_object_unref (fs), NULL))); (v == NULL ? NULL : (v = (g_object_unref (v), NULL))); (v2 == NULL ? NULL : (v2 = (g_object_unref (v2), NULL))); (fact == NULL ? NULL : (fact = (g_object_unref (fact), NULL))); }