DbResult.cc 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright: All Rights Reserved
  2. // Author: egametang@gmail.com (tanghai)
  3. #include <google/protobuf/descriptor.h>
  4. #include "Orm/DbResult.h"
  5. #include "Orm/MessageField.h"
  6. namespace Egametang {
  7. DbResult::DbResult(ResultSetPtr resultSet): resultSet(resultSet)
  8. {
  9. }
  10. void DbResult::FillMessage(ProtobufMessagePtr message)
  11. {
  12. const google::protobuf::Descriptor* descriptor = message->GetDescriptor();
  13. for (int i = 0; i < descriptor->field_count(); ++i)
  14. {
  15. if (resultSet->isNull(i))
  16. {
  17. continue;
  18. }
  19. const google::protobuf::FieldDescriptor* field = descriptor->field(i);
  20. MessageField messageField(*message, field);
  21. messageField.SetField(resultSet);
  22. }
  23. }
  24. void DbResult::All(std::vector<ProtobufMessagePtr>& messages)
  25. {
  26. for (int i = 0; i < messages.size(); ++i)
  27. {
  28. if (!resultSet->next())
  29. {
  30. return;
  31. }
  32. ProtobufMessagePtr message = messages[i];
  33. FillMessage(message);
  34. }
  35. }
  36. void DbResult::One(ProtobufMessagePtr message)
  37. {
  38. if (resultSet->next())
  39. {
  40. FillMessage(message);
  41. }
  42. }
  43. std::size_t DbResult::Count()
  44. {
  45. return resultSet->rowsCount();
  46. }
  47. } // namespace Egametang