From 47ca9cb638c288ad8bf226ffa1bf13a9e10d2484 Mon Sep 17 00:00:00 2001 From: valkjsaaa Date: Sat, 21 Mar 2015 10:55:18 +0800 Subject: [PATCH] supersonic 0.9.4 (new formula) Supersonic is an ultra-fast, column oriented query engine library written in C++. It provides a set of data transformation primitives which make heavy use of cache-aware algorithms, SIMD instructions and vectorised execution, allowing it to exploit the capabilities and resources of modern, hyper pipelined CPUs. It is designed to work in a single process. Closes Homebrew/homebrew#37929. Signed-off-by: Mike McQuaid --- Formula/supersonic.rb | 103 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 Formula/supersonic.rb diff --git a/Formula/supersonic.rb b/Formula/supersonic.rb new file mode 100644 index 0000000000..f677904083 --- /dev/null +++ b/Formula/supersonic.rb @@ -0,0 +1,103 @@ +class Supersonic < Formula + homepage "https://code.google.com/p/supersonic/" + url "https://supersonic.googlecode.com/files/supersonic-0.9.4.tar.gz" + sha256 "1592dfd2dc73f0b97298e0d25e51528dc9a94e9e7f4ab525569f63db0442d769" + + if MacOS.version < :mavericks + depends_on "protobuf" => "c++11" + depends_on "boost" => "c++11" + else + depends_on "protobuf" + depends_on "boost" + end + depends_on "glog" + depends_on "pkg-config" => :build + needs :cxx11 + + def install + ENV.cxx11 + system "./configure", "--disable-debug", + "--disable-dependency-tracking", + "--disable-silent-rules", + "--prefix=#{prefix}", + "--without-re2" + system "make", "clean" + system "make", "install" + end + + test do + (testpath/"test.cpp").write <<-EOS.undent + #include + #include + using std::cout; + using std::endl; + using supersonic::BoundExpressionTree; + using supersonic::Expression; + using supersonic::Plus; + using supersonic::AttributeAt; + using supersonic::TupleSchema; + using supersonic::Attribute; + using supersonic::INT32; + using supersonic::NOT_NULLABLE; + using supersonic::FailureOrOwned; + using supersonic::HeapBufferAllocator; + using supersonic::View; + using supersonic::EvaluationResult; + using supersonic::SingleSourceProjector; + + BoundExpressionTree* PrepareBoundexpression_r() { + scoped_ptr addition(Plus(AttributeAt(0), AttributeAt(1))); + TupleSchema schema; + schema.add_attribute(Attribute("a", INT32, NOT_NULLABLE)); + schema.add_attribute(Attribute("b", INT32, NOT_NULLABLE)); + FailureOrOwned bound_addition = + addition->Bind(schema, HeapBufferAllocator::Get(), 2048); + + if(bound_addition.is_success()) { + return bound_addition.release(); + } + + return NULL; + } + + const int32* AddColumns(int32* a, int32* b, size_t row_count, BoundExpressionTree* bound_tree) { + TupleSchema schema; + schema.add_attribute(Attribute("a", INT32, NOT_NULLABLE)); + schema.add_attribute(Attribute("b", INT32, NOT_NULLABLE)); + View input_view(schema); + input_view.set_row_count(row_count); + input_view.mutable_column(0)->Reset(a, NULL); + input_view.mutable_column(1)->Reset(b, NULL); + EvaluationResult result = bound_tree->Evaluate(input_view); + if(result.is_success()) { + cout << "Column Count : " << result.get().column_count() << + " and Row Count" << result.get().row_count() << endl; + return result.get().column(0).typed_data(); + } + + return NULL; + } + + int main(void) { + int32 a[8] = {0, 1, 2, 3, 4, 5, 6, 7}; + int32 b[8] = {3, 4, 6, 8, 1, 2, 2, 9}; + + scoped_ptr expr(PrepareBoundexpression_r()); + const int32* result = AddColumns(a, b, 8, expr.get()); + + if(result == NULL) { + cout << "Failed to execute the addition operation!" << endl; + } + + cout << "Results: "; + for(int i = 0; i < 8; i++) { + cout << result[i] << " "; + } + + return 0; + } + EOS + system ENV.cxx, "test.cpp", "-std=c++1y", "-stdlib=libc++", "-lsupersonic", "-lglog", "-lprotobuf", "-lboost_system", "-o", "test" + system "./test" + end +end