querygroup.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package source
  2. type QueryGroup struct {
  3. errorCollector *QueryErrorCollector
  4. }
  5. type QueryGroupAsyncResult struct {
  6. errorCollector *QueryErrorCollector
  7. resultsChan QueryResultsChan
  8. }
  9. type QueryGroupFuture[T any] struct {
  10. errorCollector *QueryErrorCollector
  11. future *Future[T]
  12. }
  13. func WithGroup[T any](g *QueryGroup, f *Future[T]) *QueryGroupFuture[T] {
  14. return &QueryGroupFuture[T]{
  15. errorCollector: g.errorCollector,
  16. future: f,
  17. }
  18. }
  19. func (qgf *QueryGroupFuture[T]) Await() ([]*T, error) {
  20. return qgf.future.awaitWith(qgf.errorCollector)
  21. }
  22. func NewQueryGroup() *QueryGroup {
  23. var errorCollector QueryErrorCollector
  24. return &QueryGroup{
  25. errorCollector: &errorCollector,
  26. }
  27. }
  28. func (qg *QueryGroup) With(resultsChan QueryResultsChan) *QueryGroupAsyncResult {
  29. return newQueryGroupAsyncResult(qg.errorCollector, resultsChan)
  30. }
  31. func (qg *QueryGroup) HasErrors() bool {
  32. return qg.errorCollector.IsError()
  33. }
  34. func (qg *QueryGroup) Error() error {
  35. return qg.errorCollector
  36. }
  37. func (qg *QueryGroup) Errors() []*QueryError {
  38. return qg.errorCollector.Errors()
  39. }
  40. func newQueryGroupAsyncResult(collector *QueryErrorCollector, resultsChan QueryResultsChan) *QueryGroupAsyncResult {
  41. return &QueryGroupAsyncResult{
  42. errorCollector: collector,
  43. resultsChan: resultsChan,
  44. }
  45. }
  46. func (qgar *QueryGroupAsyncResult) Await() ([]*QueryResult, error) {
  47. defer close(qgar.resultsChan)
  48. result := <-qgar.resultsChan
  49. q := result.Query
  50. err := result.Error
  51. if err != nil {
  52. qgar.errorCollector.AppendError(&QueryError{Query: q, Error: err})
  53. return nil, err
  54. }
  55. return result.Results, nil
  56. }
  57. /*
  58. type QueryResultCollection []*QueryResults
  59. func (qrc *QueryResultCollection) HasErrors() bool {
  60. for _, qr := range *qrc {
  61. if qr.Error != nil {
  62. return true
  63. }
  64. }
  65. return false
  66. }
  67. func (qrc *QueryResultCollection) Error() error {
  68. var errCollection QueryErrorCollector
  69. for _, qr := range *qrc {
  70. q := qr.Query
  71. e := qr.Error
  72. if e != nil {
  73. if IsErrorCollection(e) {
  74. if errs, ok := e.(QueryErrorCollection); ok {
  75. for _, qErr := range errs.Errors() {
  76. errCollection.AppendError(qErr)
  77. }
  78. for _, qWarn := range errs.Warnings() {
  79. errCollection.AppendWarning(qWarn)
  80. }
  81. } else {
  82. errCollection.AppendError(&QueryError{Query: q, Error: e})
  83. }
  84. } else {
  85. errCollection.AppendError(&QueryError{Query: q, Error: e})
  86. }
  87. }
  88. }
  89. return &errCollection
  90. }
  91. */