Преглед изворни кода

增加DbResultTest,演示该Orm的用法

tanghai пре 14 година
родитељ
комит
62c7e7ccc2

+ 4 - 0
Cpp/CMakeLists.txt

@@ -29,6 +29,9 @@ INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIRS})
 FIND_PACKAGE(Perftools REQUIRED)
 FIND_PACKAGE(Perftools REQUIRED)
 INCLUDE_DIRECTORIES(${PERFTOOLS_INCLUDE_DIRS})
 INCLUDE_DIRECTORIES(${PERFTOOLS_INCLUDE_DIRS})
 
 
+FIND_PACKAGE(MysqlConnector REQUIRED)
+INCLUDE_DIRECTORIES(${MYSQL_CONNECTOR_INCLUDE_DIRS})
+
 FIND_PACKAGE(Mono REQUIRED)
 FIND_PACKAGE(Mono REQUIRED)
 
 
 FIND_PACKAGE(Boost REQUIRED thread system)
 FIND_PACKAGE(Boost REQUIRED thread system)
@@ -43,6 +46,7 @@ SET(ThirdPartyLibs
 	gmock
 	gmock
 	${PROTOBUF_LIBRARIES}
 	${PROTOBUF_LIBRARIES}
 	${Boost_LIBRARIES}
 	${Boost_LIBRARIES}
+	${MYSQL_CONNECTOR_LIBRARIES}
 	${PERFTOOLS_DEBUG_LIBRARIES}
 	${PERFTOOLS_DEBUG_LIBRARIES}
 )
 )
 
 

+ 0 - 20
Cpp/Cmake/FindGTest.cmake

@@ -1,20 +0,0 @@
-FIND_PATH(GTEST_INCLUDE_DIR gtest/gtest.h)
-
-IF(WIN32)
-    SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
-ENDIF()
-
-FIND_LIBRARY(GTEST_LIBRARY NAMES gtest
-			DOC "The Google Gtest Library"
-			)
-
-
-IF(GTEST_FOUND)
-	SET(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
-	SET(GTEST_LIBRARIES    ${GTEST_LIBRARY})
-ENDIF()
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTEST DEFAULT_MSG GTEST_INCLUDE_DIR GTEST_LIBRARY)
-
-MARK_AS_ADVANCED(GTEST_INCLUDE_DIR GTEST_LIBRARY)

+ 19 - 0
Cpp/Cmake/FindMysqlConnector.cmake

@@ -0,0 +1,19 @@
+FIND_PATH(MYSQL_CONNECTOR_INCLUDE_DIR mysql_driver.h)
+
+IF(WIN32)
+    SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+ENDIF()
+
+FIND_LIBRARY(MYSQL_CONNECTOR_LIBRARY NAMES mysqlcppconn
+			DOC "The Mysql Connector Library"
+			)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(MYSQL_CONNECTOR DEFAULT_MSG MYSQL_CONNECTOR_INCLUDE_DIR MYSQL_CONNECTOR_LIBRARY)
+
+IF(MYSQL_CONNECTOR_FOUND)
+	SET(MYSQL_CONNECTOR_INCLUDE_DIRS ${MYSQL_CONNECTOR_INCLUDE_DIR})
+	SET(MYSQL_CONNECTOR_LIBRARIES    ${MYSQL_CONNECTOR_LIBRARY})
+ENDIF()
+
+MARK_AS_ADVANCED(GTEST_INCLUDE_DIR GTEST_LIBRARY)

+ 2 - 0
Cpp/Platform/Orm/CMakeLists.txt

@@ -22,12 +22,14 @@ ADD_EXECUTABLE(SelectTest SelectTest.cc)
 ADD_EXECUTABLE(MessageFieldTest MessageFieldTest.cc)
 ADD_EXECUTABLE(MessageFieldTest MessageFieldTest.cc)
 ADD_EXECUTABLE(ColumnTest ColumnTest.cc)
 ADD_EXECUTABLE(ColumnTest ColumnTest.cc)
 ADD_EXECUTABLE(ExprTest ExprTest.cc)
 ADD_EXECUTABLE(ExprTest ExprTest.cc)
+ADD_EXECUTABLE(DbResultTest DbResultTest.cc)
 
 
 SET(Tests
 SET(Tests
 	SelectTest
 	SelectTest
 	MessageFieldTest
 	MessageFieldTest
 	ColumnTest
 	ColumnTest
 	ExprTest
 	ExprTest
+	DbResultTest
 )
 )
 
 
 FOREACH(Test ${Tests})
 FOREACH(Test ${Tests})

+ 0 - 13
Cpp/Platform/Orm/DbResult.cc

@@ -26,19 +26,6 @@ void DbResult::FillMessage(ProtobufMessagePtr message)
 	}
 	}
 }
 }
 
 
-void DbResult::All(std::vector<ProtobufMessagePtr>& messages)
-{
-	for (int i = 0; i < messages.size(); ++i)
-	{
-		if (!resultSet->next())
-		{
-			return;
-		}
-		ProtobufMessagePtr message = messages[i];
-		FillMessage(message);
-	}
-}
-
 void DbResult::One(ProtobufMessagePtr message)
 void DbResult::One(ProtobufMessagePtr message)
 {
 {
 	if (resultSet->next())
 	if (resultSet->next())

+ 14 - 3
Cpp/Platform/Orm/DbResult.h

@@ -20,13 +20,24 @@ private:
 
 
 public:
 public:
 	DbResult(ResultSetPtr resultSet);
 	DbResult(ResultSetPtr resultSet);
-	virtual ~DbResult();
-
-	void All(std::vector<ProtobufMessagePtr>& messages);
 
 
 	void One(ProtobufMessagePtr message);
 	void One(ProtobufMessagePtr message);
 
 
 	std::size_t Count();
 	std::size_t Count();
+
+	template <typename Table>
+	void All(std::vector<boost::shared_ptr<Table> >& messages)
+	{
+		for (std::size_t i = 0; i < messages.size(); ++i)
+		{
+			if (!resultSet->next())
+			{
+				return;
+			}
+			ProtobufMessagePtr message = messages[i];
+			FillMessage(message);
+		}
+	}
 };
 };
 
 
 } // namespace Egametang
 } // namespace Egametang

+ 30 - 0
Cpp/Platform/Orm/DbResultTest.cc

@@ -1,8 +1,38 @@
 // Copyright: All Rights Reserved
 // Copyright: All Rights Reserved
 // Author: egametang@gmail.com (tanghai)
 // Author: egametang@gmail.com (tanghai)
 
 
+#include <gtest/gtest.h>
+#include <gflags/gflags.h>
+#include <glog/logging.h>
+#include "Orm/DbHelper.h"
 #include "Orm/DbResult.h"
 #include "Orm/DbResult.h"
+#include "Orm/Select.h"
+#include "Orm/Person.pb.h"
 
 
 namespace Egametang {
 namespace Egametang {
 
 
+class DbResultTest: public testing::Test
+{
+};
+
+TEST_F(DbResultTest, One)
+{
+	DbHelper dbHelper("192.168.1.4", "root", "111111");
+
+	DbResultPtr result = dbHelper.Execute(
+			Select<Person>(Column("*"))
+			.Where(Column("age") > 10));
+
+	boost::shared_ptr<Person> person;
+	result->One(person);
+}
+
 } // namespace Egametang
 } // namespace Egametang
+
+int main(int argc, char* argv[])
+{
+	testing::InitGoogleTest(&argc, argv);
+	google::InitGoogleLogging(argv[0]);
+	google::ParseCommandLineFlags(&argc, &argv, true);
+	return RUN_ALL_TESTS();
+}