summaryrefslogtreecommitdiff
path: root/project2/sql
diff options
context:
space:
mode:
Diffstat (limited to 'project2/sql')
-rw-r--r--project2/sql/Jamfile.jam3
-rw-r--r--project2/sql/sqlBulkLoad.cpp40
2 files changed, 41 insertions, 2 deletions
diff --git a/project2/sql/Jamfile.jam b/project2/sql/Jamfile.jam
index 3e63abb..cd6b6a5 100644
--- a/project2/sql/Jamfile.jam
+++ b/project2/sql/Jamfile.jam
@@ -32,8 +32,7 @@ cpp-pch pch : pch.hpp :
;
lib p2sql :
pch
- sqlTest.cpp sqlWriter.cpp sqlTask.cpp sqlMergeTask.cpp sqlRows.cpp sqlCache.cpp sqlVariableBinder.cpp tablepatch.cpp rdbmsDataSource.cpp
- sqlHandleAsVariableType.cpp
+ [ glob *.cpp : sql-mod*.cpp ]
../../libdbpp//dbpp
:
<odbc>yes:<library>sql-modODBC
diff --git a/project2/sql/sqlBulkLoad.cpp b/project2/sql/sqlBulkLoad.cpp
new file mode 100644
index 0000000..227f06c
--- /dev/null
+++ b/project2/sql/sqlBulkLoad.cpp
@@ -0,0 +1,40 @@
+#include <pch.hpp>
+#include "task.h"
+#include "scopeObject.h"
+#include "stream.h"
+
+class SqlBulkLoad : public Task {
+ public:
+ SqlBulkLoad(ScriptNodePtr p) :
+ SourceObject(p),
+ Task(p),
+ dataSource(p, "datasource"),
+ targetTable(p, "targettable"),
+ extras(p, "extras")
+ {
+ p->script->loader.addLoadTarget(p, Storer::into<ElementLoader>(&stream));
+ }
+
+ void loadComplete(const CommonObjects * co)
+ {
+ db = co->dataSource<RdbmsDataSource>(dataSource());
+ }
+
+ void execute() const
+ {
+ db->getWritable().beginBulkUpload(targetTable(), extras());
+ ScopeObject tidy([]{},
+ [=]{ db->getWritable().endBulkUpload(NULL); },
+ [=]{ db->getWritable().endBulkUpload("Stack unwind in progress"); });
+ stream->runStream(boost::bind(&DB::Connection::bulkUploadData, &db->getWritable(), _1, _2));
+ }
+
+ const Variable dataSource;
+ const Variable targetTable;
+ const Variable extras;
+ StreamPtr stream;
+ protected:
+ const RdbmsDataSource * db;
+};
+
+DECLARE_LOADER("sqlbulkload", SqlBulkLoad);