servlib/storage/SQLBundleStore.cc
changeset 0 2b3e5ec03512
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlib/storage/SQLBundleStore.cc	Thu Apr 21 14:57:45 2011 +0100
@@ -0,0 +1,126 @@
+/*
+ *    Copyright 2004-2006 Intel Corporation
+ * 
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ * 
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <dtn-config.h>
+#endif
+
+#if SQL_ENABLED
+
+#include "SQLBundleStore.h"
+#include "SQLStore.h"
+#include "StorageConfig.h"
+#include "bundling/Bundle.h"
+
+namespace dtn {
+
+/******************************************************************************
+ *
+ * SQLBundleStore
+ *
+ *****************************************************************************/
+
+/**
+ * Constructor.
+ */
+
+SQLBundleStore::SQLBundleStore(oasys::SQLImplementation* db, const char* table_name)
+    : BundleStore()
+{
+    Bundle tmpobj(this);
+
+    store_ = new SQLStore(table_name, db);
+    store_->create_table(&tmpobj);
+    store_->set_key_name("bundleid");
+}
+
+/**
+ * Create a new bundle instance, then make a generic call into the
+ * bundleStore to look up the bundle and fill in it's members if
+ * found.
+ */
+
+Bundle*
+SQLBundleStore::get(int bundle_id)
+{
+    Bundle* bundle = new Bundle();
+    if (store_->get(bundle, bundle_id) != 0) {
+        delete bundle;
+        return NULL;
+    }
+
+    return bundle;
+}
+
+/**
+ * Store the given bundle in the persistent store.
+ */
+bool
+SQLBundleStore::insert(Bundle* bundle)
+{
+    return store_->insert(bundle) == 0;
+}
+
+/**
+ * Update the given bundle in the persistent store.
+ */
+bool
+SQLBundleStore::update(Bundle* bundle)
+{
+    return store_->update(bundle, bundle->bundleid_) == 0;
+}
+
+/**
+ * Delete the given bundle from the persistent store.
+ */
+bool
+SQLBundleStore::del(int bundle_id)
+{
+    return store_->del(bundle_id) == 0;
+}
+
+
+
+int 
+SQLBundleStore::delete_expired(const time_t now) 
+{
+    const char* field = "expiration";
+    oasys::StringBuffer query ;
+    query.appendf("DELETE FROM %s WHERE %s > %lu", store_->table_name(), field, now);
+    
+    int retval = store_->exec_query(query.c_str());
+    return retval;
+}
+     
+
+
+bool
+SQLBundleStore::is_custodian(int bundle_id) 
+{
+    NOTIMPLEMENTED ; 
+
+    /**
+     * One possible implementation. Currently b.is_custodian() 
+     * function does not exist
+     * Bundle b = get(bundle_id);
+     * if (b == NULL) return 0;
+     * return (b.is_custodian()) ;
+     */
+}
+
+} // namespace dtn
+
+#endif /* SQL_ENABLED */