> allOffsets,
83 | ) {
84 | final object = Habit();
85 | object.completedDays = reader.readDateTimeList(offsets[0]) ?? [];
86 | object.currentStreak = reader.readLong(offsets[1]);
87 | object.id = id;
88 | object.longestStreak = reader.readLong(offsets[2]);
89 | object.name = reader.readString(offsets[3]);
90 | return object;
91 | }
92 |
93 | P _habitDeserializeProp(
94 | IsarReader reader,
95 | int propertyId,
96 | int offset,
97 | Map> allOffsets,
98 | ) {
99 | switch (propertyId) {
100 | case 0:
101 | return (reader.readDateTimeList(offset) ?? []) as P;
102 | case 1:
103 | return (reader.readLong(offset)) as P;
104 | case 2:
105 | return (reader.readLong(offset)) as P;
106 | case 3:
107 | return (reader.readString(offset)) as P;
108 | default:
109 | throw IsarError('Unknown property with id $propertyId');
110 | }
111 | }
112 |
113 | Id _habitGetId(Habit object) {
114 | return object.id;
115 | }
116 |
117 | List> _habitGetLinks(Habit object) {
118 | return [];
119 | }
120 |
121 | void _habitAttach(IsarCollection col, Id id, Habit object) {
122 | object.id = id;
123 | }
124 |
125 | extension HabitQueryWhereSort on QueryBuilder {
126 | QueryBuilder anyId() {
127 | return QueryBuilder.apply(this, (query) {
128 | return query.addWhereClause(const IdWhereClause.any());
129 | });
130 | }
131 | }
132 |
133 | extension HabitQueryWhere on QueryBuilder {
134 | QueryBuilder idEqualTo(Id id) {
135 | return QueryBuilder.apply(this, (query) {
136 | return query.addWhereClause(IdWhereClause.between(
137 | lower: id,
138 | upper: id,
139 | ));
140 | });
141 | }
142 |
143 | QueryBuilder idNotEqualTo(Id id) {
144 | return QueryBuilder.apply(this, (query) {
145 | if (query.whereSort == Sort.asc) {
146 | return query
147 | .addWhereClause(
148 | IdWhereClause.lessThan(upper: id, includeUpper: false),
149 | )
150 | .addWhereClause(
151 | IdWhereClause.greaterThan(lower: id, includeLower: false),
152 | );
153 | } else {
154 | return query
155 | .addWhereClause(
156 | IdWhereClause.greaterThan(lower: id, includeLower: false),
157 | )
158 | .addWhereClause(
159 | IdWhereClause.lessThan(upper: id, includeUpper: false),
160 | );
161 | }
162 | });
163 | }
164 |
165 | QueryBuilder idGreaterThan(Id id,
166 | {bool include = false}) {
167 | return QueryBuilder.apply(this, (query) {
168 | return query.addWhereClause(
169 | IdWhereClause.greaterThan(lower: id, includeLower: include),
170 | );
171 | });
172 | }
173 |
174 | QueryBuilder idLessThan(Id id,
175 | {bool include = false}) {
176 | return QueryBuilder.apply(this, (query) {
177 | return query.addWhereClause(
178 | IdWhereClause.lessThan(upper: id, includeUpper: include),
179 | );
180 | });
181 | }
182 |
183 | QueryBuilder idBetween(
184 | Id lowerId,
185 | Id upperId, {
186 | bool includeLower = true,
187 | bool includeUpper = true,
188 | }) {
189 | return QueryBuilder.apply(this, (query) {
190 | return query.addWhereClause(IdWhereClause.between(
191 | lower: lowerId,
192 | includeLower: includeLower,
193 | upper: upperId,
194 | includeUpper: includeUpper,
195 | ));
196 | });
197 | }
198 | }
199 |
200 | extension HabitQueryFilter on QueryBuilder {
201 | QueryBuilder completedDaysElementEqualTo(
202 | DateTime value) {
203 | return QueryBuilder.apply(this, (query) {
204 | return query.addFilterCondition(FilterCondition.equalTo(
205 | property: r'completedDays',
206 | value: value,
207 | ));
208 | });
209 | }
210 |
211 | QueryBuilder
212 | completedDaysElementGreaterThan(
213 | DateTime value, {
214 | bool include = false,
215 | }) {
216 | return QueryBuilder.apply(this, (query) {
217 | return query.addFilterCondition(FilterCondition.greaterThan(
218 | include: include,
219 | property: r'completedDays',
220 | value: value,
221 | ));
222 | });
223 | }
224 |
225 | QueryBuilder
226 | completedDaysElementLessThan(
227 | DateTime value, {
228 | bool include = false,
229 | }) {
230 | return QueryBuilder.apply(this, (query) {
231 | return query.addFilterCondition(FilterCondition.lessThan(
232 | include: include,
233 | property: r'completedDays',
234 | value: value,
235 | ));
236 | });
237 | }
238 |
239 | QueryBuilder completedDaysElementBetween(
240 | DateTime lower,
241 | DateTime upper, {
242 | bool includeLower = true,
243 | bool includeUpper = true,
244 | }) {
245 | return QueryBuilder.apply(this, (query) {
246 | return query.addFilterCondition(FilterCondition.between(
247 | property: r'completedDays',
248 | lower: lower,
249 | includeLower: includeLower,
250 | upper: upper,
251 | includeUpper: includeUpper,
252 | ));
253 | });
254 | }
255 |
256 | QueryBuilder completedDaysLengthEqualTo(
257 | int length) {
258 | return QueryBuilder.apply(this, (query) {
259 | return query.listLength(
260 | r'completedDays',
261 | length,
262 | true,
263 | length,
264 | true,
265 | );
266 | });
267 | }
268 |
269 | QueryBuilder completedDaysIsEmpty() {
270 | return QueryBuilder.apply(this, (query) {
271 | return query.listLength(
272 | r'completedDays',
273 | 0,
274 | true,
275 | 0,
276 | true,
277 | );
278 | });
279 | }
280 |
281 | QueryBuilder completedDaysIsNotEmpty() {
282 | return QueryBuilder.apply(this, (query) {
283 | return query.listLength(
284 | r'completedDays',
285 | 0,
286 | false,
287 | 999999,
288 | true,
289 | );
290 | });
291 | }
292 |
293 | QueryBuilder completedDaysLengthLessThan(
294 | int length, {
295 | bool include = false,
296 | }) {
297 | return QueryBuilder.apply(this, (query) {
298 | return query.listLength(
299 | r'completedDays',
300 | 0,
301 | true,
302 | length,
303 | include,
304 | );
305 | });
306 | }
307 |
308 | QueryBuilder
309 | completedDaysLengthGreaterThan(
310 | int length, {
311 | bool include = false,
312 | }) {
313 | return QueryBuilder.apply(this, (query) {
314 | return query.listLength(
315 | r'completedDays',
316 | length,
317 | include,
318 | 999999,
319 | true,
320 | );
321 | });
322 | }
323 |
324 | QueryBuilder completedDaysLengthBetween(
325 | int lower,
326 | int upper, {
327 | bool includeLower = true,
328 | bool includeUpper = true,
329 | }) {
330 | return QueryBuilder.apply(this, (query) {
331 | return query.listLength(
332 | r'completedDays',
333 | lower,
334 | includeLower,
335 | upper,
336 | includeUpper,
337 | );
338 | });
339 | }
340 |
341 | QueryBuilder currentStreakEqualTo(
342 | int value) {
343 | return QueryBuilder.apply(this, (query) {
344 | return query.addFilterCondition(FilterCondition.equalTo(
345 | property: r'currentStreak',
346 | value: value,
347 | ));
348 | });
349 | }
350 |
351 | QueryBuilder currentStreakGreaterThan(
352 | int value, {
353 | bool include = false,
354 | }) {
355 | return QueryBuilder.apply(this, (query) {
356 | return query.addFilterCondition(FilterCondition.greaterThan(
357 | include: include,
358 | property: r'currentStreak',
359 | value: value,
360 | ));
361 | });
362 | }
363 |
364 | QueryBuilder currentStreakLessThan(
365 | int value, {
366 | bool include = false,
367 | }) {
368 | return QueryBuilder.apply(this, (query) {
369 | return query.addFilterCondition(FilterCondition.lessThan(
370 | include: include,
371 | property: r'currentStreak',
372 | value: value,
373 | ));
374 | });
375 | }
376 |
377 | QueryBuilder currentStreakBetween(
378 | int lower,
379 | int upper, {
380 | bool includeLower = true,
381 | bool includeUpper = true,
382 | }) {
383 | return QueryBuilder.apply(this, (query) {
384 | return query.addFilterCondition(FilterCondition.between(
385 | property: r'currentStreak',
386 | lower: lower,
387 | includeLower: includeLower,
388 | upper: upper,
389 | includeUpper: includeUpper,
390 | ));
391 | });
392 | }
393 |
394 | QueryBuilder idEqualTo(Id value) {
395 | return QueryBuilder.apply(this, (query) {
396 | return query.addFilterCondition(FilterCondition.equalTo(
397 | property: r'id',
398 | value: value,
399 | ));
400 | });
401 | }
402 |
403 | QueryBuilder idGreaterThan(
404 | Id value, {
405 | bool include = false,
406 | }) {
407 | return QueryBuilder.apply(this, (query) {
408 | return query.addFilterCondition(FilterCondition.greaterThan(
409 | include: include,
410 | property: r'id',
411 | value: value,
412 | ));
413 | });
414 | }
415 |
416 | QueryBuilder idLessThan(
417 | Id value, {
418 | bool include = false,
419 | }) {
420 | return QueryBuilder.apply(this, (query) {
421 | return query.addFilterCondition(FilterCondition.lessThan(
422 | include: include,
423 | property: r'id',
424 | value: value,
425 | ));
426 | });
427 | }
428 |
429 | QueryBuilder idBetween(
430 | Id lower,
431 | Id upper, {
432 | bool includeLower = true,
433 | bool includeUpper = true,
434 | }) {
435 | return QueryBuilder.apply(this, (query) {
436 | return query.addFilterCondition(FilterCondition.between(
437 | property: r'id',
438 | lower: lower,
439 | includeLower: includeLower,
440 | upper: upper,
441 | includeUpper: includeUpper,
442 | ));
443 | });
444 | }
445 |
446 | QueryBuilder longestStreakEqualTo(
447 | int value) {
448 | return QueryBuilder.apply(this, (query) {
449 | return query.addFilterCondition(FilterCondition.equalTo(
450 | property: r'longestStreak',
451 | value: value,
452 | ));
453 | });
454 | }
455 |
456 | QueryBuilder longestStreakGreaterThan(
457 | int value, {
458 | bool include = false,
459 | }) {
460 | return QueryBuilder.apply(this, (query) {
461 | return query.addFilterCondition(FilterCondition.greaterThan(
462 | include: include,
463 | property: r'longestStreak',
464 | value: value,
465 | ));
466 | });
467 | }
468 |
469 | QueryBuilder longestStreakLessThan(
470 | int value, {
471 | bool include = false,
472 | }) {
473 | return QueryBuilder.apply(this, (query) {
474 | return query.addFilterCondition(FilterCondition.lessThan(
475 | include: include,
476 | property: r'longestStreak',
477 | value: value,
478 | ));
479 | });
480 | }
481 |
482 | QueryBuilder longestStreakBetween(
483 | int lower,
484 | int upper, {
485 | bool includeLower = true,
486 | bool includeUpper = true,
487 | }) {
488 | return QueryBuilder.apply(this, (query) {
489 | return query.addFilterCondition(FilterCondition.between(
490 | property: r'longestStreak',
491 | lower: lower,
492 | includeLower: includeLower,
493 | upper: upper,
494 | includeUpper: includeUpper,
495 | ));
496 | });
497 | }
498 |
499 | QueryBuilder nameEqualTo(
500 | String value, {
501 | bool caseSensitive = true,
502 | }) {
503 | return QueryBuilder.apply(this, (query) {
504 | return query.addFilterCondition(FilterCondition.equalTo(
505 | property: r'name',
506 | value: value,
507 | caseSensitive: caseSensitive,
508 | ));
509 | });
510 | }
511 |
512 | QueryBuilder nameGreaterThan(
513 | String value, {
514 | bool include = false,
515 | bool caseSensitive = true,
516 | }) {
517 | return QueryBuilder.apply(this, (query) {
518 | return query.addFilterCondition(FilterCondition.greaterThan(
519 | include: include,
520 | property: r'name',
521 | value: value,
522 | caseSensitive: caseSensitive,
523 | ));
524 | });
525 | }
526 |
527 | QueryBuilder nameLessThan(
528 | String value, {
529 | bool include = false,
530 | bool caseSensitive = true,
531 | }) {
532 | return QueryBuilder.apply(this, (query) {
533 | return query.addFilterCondition(FilterCondition.lessThan(
534 | include: include,
535 | property: r'name',
536 | value: value,
537 | caseSensitive: caseSensitive,
538 | ));
539 | });
540 | }
541 |
542 | QueryBuilder nameBetween(
543 | String lower,
544 | String upper, {
545 | bool includeLower = true,
546 | bool includeUpper = true,
547 | bool caseSensitive = true,
548 | }) {
549 | return QueryBuilder.apply(this, (query) {
550 | return query.addFilterCondition(FilterCondition.between(
551 | property: r'name',
552 | lower: lower,
553 | includeLower: includeLower,
554 | upper: upper,
555 | includeUpper: includeUpper,
556 | caseSensitive: caseSensitive,
557 | ));
558 | });
559 | }
560 |
561 | QueryBuilder nameStartsWith(
562 | String value, {
563 | bool caseSensitive = true,
564 | }) {
565 | return QueryBuilder.apply(this, (query) {
566 | return query.addFilterCondition(FilterCondition.startsWith(
567 | property: r'name',
568 | value: value,
569 | caseSensitive: caseSensitive,
570 | ));
571 | });
572 | }
573 |
574 | QueryBuilder nameEndsWith(
575 | String value, {
576 | bool caseSensitive = true,
577 | }) {
578 | return QueryBuilder.apply(this, (query) {
579 | return query.addFilterCondition(FilterCondition.endsWith(
580 | property: r'name',
581 | value: value,
582 | caseSensitive: caseSensitive,
583 | ));
584 | });
585 | }
586 |
587 | QueryBuilder nameContains(String value,
588 | {bool caseSensitive = true}) {
589 | return QueryBuilder.apply(this, (query) {
590 | return query.addFilterCondition(FilterCondition.contains(
591 | property: r'name',
592 | value: value,
593 | caseSensitive: caseSensitive,
594 | ));
595 | });
596 | }
597 |
598 | QueryBuilder nameMatches(String pattern,
599 | {bool caseSensitive = true}) {
600 | return QueryBuilder.apply(this, (query) {
601 | return query.addFilterCondition(FilterCondition.matches(
602 | property: r'name',
603 | wildcard: pattern,
604 | caseSensitive: caseSensitive,
605 | ));
606 | });
607 | }
608 |
609 | QueryBuilder nameIsEmpty() {
610 | return QueryBuilder.apply(this, (query) {
611 | return query.addFilterCondition(FilterCondition.equalTo(
612 | property: r'name',
613 | value: '',
614 | ));
615 | });
616 | }
617 |
618 | QueryBuilder nameIsNotEmpty() {
619 | return QueryBuilder.apply(this, (query) {
620 | return query.addFilterCondition(FilterCondition.greaterThan(
621 | property: r'name',
622 | value: '',
623 | ));
624 | });
625 | }
626 | }
627 |
628 | extension HabitQueryObject on QueryBuilder {}
629 |
630 | extension HabitQueryLinks on QueryBuilder {}
631 |
632 | extension HabitQuerySortBy on QueryBuilder {
633 | QueryBuilder sortByCurrentStreak() {
634 | return QueryBuilder.apply(this, (query) {
635 | return query.addSortBy(r'currentStreak', Sort.asc);
636 | });
637 | }
638 |
639 | QueryBuilder sortByCurrentStreakDesc() {
640 | return QueryBuilder.apply(this, (query) {
641 | return query.addSortBy(r'currentStreak', Sort.desc);
642 | });
643 | }
644 |
645 | QueryBuilder sortByLongestStreak() {
646 | return QueryBuilder.apply(this, (query) {
647 | return query.addSortBy(r'longestStreak', Sort.asc);
648 | });
649 | }
650 |
651 | QueryBuilder sortByLongestStreakDesc() {
652 | return QueryBuilder.apply(this, (query) {
653 | return query.addSortBy(r'longestStreak', Sort.desc);
654 | });
655 | }
656 |
657 | QueryBuilder sortByName() {
658 | return QueryBuilder.apply(this, (query) {
659 | return query.addSortBy(r'name', Sort.asc);
660 | });
661 | }
662 |
663 | QueryBuilder sortByNameDesc() {
664 | return QueryBuilder.apply(this, (query) {
665 | return query.addSortBy(r'name', Sort.desc);
666 | });
667 | }
668 | }
669 |
670 | extension HabitQuerySortThenBy on QueryBuilder {
671 | QueryBuilder thenByCurrentStreak() {
672 | return QueryBuilder.apply(this, (query) {
673 | return query.addSortBy(r'currentStreak', Sort.asc);
674 | });
675 | }
676 |
677 | QueryBuilder thenByCurrentStreakDesc() {
678 | return QueryBuilder.apply(this, (query) {
679 | return query.addSortBy(r'currentStreak', Sort.desc);
680 | });
681 | }
682 |
683 | QueryBuilder thenById() {
684 | return QueryBuilder.apply(this, (query) {
685 | return query.addSortBy(r'id', Sort.asc);
686 | });
687 | }
688 |
689 | QueryBuilder thenByIdDesc() {
690 | return QueryBuilder.apply(this, (query) {
691 | return query.addSortBy(r'id', Sort.desc);
692 | });
693 | }
694 |
695 | QueryBuilder thenByLongestStreak() {
696 | return QueryBuilder.apply(this, (query) {
697 | return query.addSortBy(r'longestStreak', Sort.asc);
698 | });
699 | }
700 |
701 | QueryBuilder thenByLongestStreakDesc() {
702 | return QueryBuilder.apply(this, (query) {
703 | return query.addSortBy(r'longestStreak', Sort.desc);
704 | });
705 | }
706 |
707 | QueryBuilder thenByName() {
708 | return QueryBuilder.apply(this, (query) {
709 | return query.addSortBy(r'name', Sort.asc);
710 | });
711 | }
712 |
713 | QueryBuilder thenByNameDesc() {
714 | return QueryBuilder.apply(this, (query) {
715 | return query.addSortBy(r'name', Sort.desc);
716 | });
717 | }
718 | }
719 |
720 | extension HabitQueryWhereDistinct on QueryBuilder {
721 | QueryBuilder distinctByCompletedDays() {
722 | return QueryBuilder.apply(this, (query) {
723 | return query.addDistinctBy(r'completedDays');
724 | });
725 | }
726 |
727 | QueryBuilder distinctByCurrentStreak() {
728 | return QueryBuilder.apply(this, (query) {
729 | return query.addDistinctBy(r'currentStreak');
730 | });
731 | }
732 |
733 | QueryBuilder distinctByLongestStreak() {
734 | return QueryBuilder.apply(this, (query) {
735 | return query.addDistinctBy(r'longestStreak');
736 | });
737 | }
738 |
739 | QueryBuilder distinctByName(
740 | {bool caseSensitive = true}) {
741 | return QueryBuilder.apply(this, (query) {
742 | return query.addDistinctBy(r'name', caseSensitive: caseSensitive);
743 | });
744 | }
745 | }
746 |
747 | extension HabitQueryProperty on QueryBuilder {
748 | QueryBuilder idProperty() {
749 | return QueryBuilder.apply(this, (query) {
750 | return query.addPropertyName(r'id');
751 | });
752 | }
753 |
754 | QueryBuilder, QQueryOperations>
755 | completedDaysProperty() {
756 | return QueryBuilder.apply(this, (query) {
757 | return query.addPropertyName(r'completedDays');
758 | });
759 | }
760 |
761 | QueryBuilder currentStreakProperty() {
762 | return QueryBuilder.apply(this, (query) {
763 | return query.addPropertyName(r'currentStreak');
764 | });
765 | }
766 |
767 | QueryBuilder longestStreakProperty() {
768 | return QueryBuilder.apply(this, (query) {
769 | return query.addPropertyName(r'longestStreak');
770 | });
771 | }
772 |
773 | QueryBuilder nameProperty() {
774 | return QueryBuilder.apply(this, (query) {
775 | return query.addPropertyName(r'name');
776 | });
777 | }
778 | }
779 |
--------------------------------------------------------------------------------