DbResult.cc 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. return;
  41. }
  42. FillMessage(message);
  43. }
  44. std::size_t DbResult::Count()
  45. {
  46. return resultSet->rowsCount();
  47. }
  48. } // namespace Egametang