2
2
import numpy as np
3
3
from typing import *
4
4
5
+ from objectbox .model .properties import Property
5
6
from objectbox .objectbox import ObjectBox
6
7
from objectbox .query import Query
7
8
from objectbox .c import *
@@ -13,87 +14,113 @@ def __init__(self, ob: ObjectBox, box: 'Box'):
13
14
self ._entity = box ._entity
14
15
self ._c_builder = obx_query_builder (ob ._c_store , box ._entity .id )
15
16
17
+ def _get_property_id (self , prop : Union [int , str , Property ]) -> int :
18
+ if type (prop ) is int :
19
+ return prop
20
+ elif type (prop ) is str :
21
+ prop = self ._entity .get_property (prop )
22
+ return prop ._id
23
+
16
24
def close (self ) -> int :
17
- return obx_qb_close (self )
25
+ return obx_qb_close (self . _c_builder )
18
26
19
27
def error_code (self ) -> int :
20
- return obx_qb_error_code (self )
21
-
28
+ return obx_qb_error_code (self . _c_builder )
29
+
22
30
def error_message (self ) -> str :
23
- return obx_qb_error_message (self )
24
-
25
- def equals_string (self , property_id : int , value : str , case_sensitive : bool ):
26
- obx_qb_equals_string (self ._c_builder , property_id , c_str (value ), case_sensitive )
31
+ return obx_qb_error_message (self ._c_builder )
32
+
33
+ def equals_string (self , prop : Union [int , str , Property ], value : str , case_sensitive : bool = True ):
34
+ prop_id = self ._get_property_id (prop )
35
+ obx_qb_equals_string (self ._c_builder , prop_id , c_str (value ), case_sensitive )
27
36
return self
28
-
29
- def not_equals_string (self , property_id : int , value : str , case_sensitive : bool ):
30
- obx_qb_not_equals_string (self ._c_builder , property_id , c_str (value ), case_sensitive )
37
+
38
+ def not_equals_string (self , prop : Union [int , str , Property ], value : str , case_sensitive : bool = True ):
39
+ prop_id = self ._get_property_id (prop )
40
+ obx_qb_not_equals_string (self ._c_builder , prop_id , c_str (value ), case_sensitive )
31
41
return self
32
-
33
- def contains_string (self , property_id : int , value : str , case_sensitive : bool ):
34
- obx_qb_contains_string (self ._c_builder , property_id , c_str (value ), case_sensitive )
42
+
43
+ def contains_string (self , prop : Union [int , str , Property ], value : str , case_sensitive : bool = True ):
44
+ prop_id = self ._get_property_id (prop )
45
+ obx_qb_contains_string (self ._c_builder , prop_id , c_str (value ), case_sensitive )
35
46
return self
36
-
37
- def starts_with_string (self , property_id : int , value : str , case_sensitive : bool ):
38
- obx_qb_starts_with_string (self ._c_builder , property_id , c_str (value ), case_sensitive )
47
+
48
+ def starts_with_string (self , prop : Union [int , str , Property ], value : str , case_sensitive : bool = True ):
49
+ prop_id = self ._get_property_id (prop )
50
+ obx_qb_starts_with_string (self ._c_builder , prop_id , c_str (value ), case_sensitive )
39
51
return self
40
-
41
- def ends_with_string (self , property_id : int , value : str , case_sensitive : bool ):
42
- obx_qb_ends_with_string (self ._c_builder , property_id , c_str (value ), case_sensitive )
52
+
53
+ def ends_with_string (self , prop : Union [int , str , Property ], value : str , case_sensitive : bool = True ):
54
+ prop_id = self ._get_property_id (prop )
55
+ obx_qb_ends_with_string (self ._c_builder , prop_id , c_str (value ), case_sensitive )
43
56
return self
44
-
45
- def greater_than_string (self , property_id : int , value : str , case_sensitive : bool ):
46
- obx_qb_greater_than_string (self ._c_builder , property_id , c_str (value ), case_sensitive )
57
+
58
+ def greater_than_string (self , prop : Union [int , str , Property ], value : str , case_sensitive : bool = True ):
59
+ prop_id = self ._get_property_id (prop )
60
+ obx_qb_greater_than_string (self ._c_builder , prop_id , c_str (value ), case_sensitive )
47
61
return self
48
-
49
- def greater_or_equal_string (self , property_id : int , value : str , case_sensitive : bool ):
50
- obx_qb_greater_or_equal_string (self ._c_builder , property_id , c_str (value ), case_sensitive )
62
+
63
+ def greater_or_equal_string (self , prop : Union [int , str , Property ], value : str , case_sensitive : bool = True ):
64
+ prop_id = self ._get_property_id (prop )
65
+ obx_qb_greater_or_equal_string (self ._c_builder , prop_id , c_str (value ), case_sensitive )
51
66
return self
52
-
53
- def less_than_string (self , property_id : int , value : str , case_sensitive : bool ):
54
- obx_qb_less_than_string (self ._c_builder , property_id , c_str (value ), case_sensitive )
67
+
68
+ def less_than_string (self , prop : Union [int , str , Property ], value : str , case_sensitive : bool = True ):
69
+ prop_id = self ._get_property_id (prop )
70
+ obx_qb_less_than_string (self ._c_builder , prop_id , c_str (value ), case_sensitive )
55
71
return self
56
-
57
- def less_or_equal_string (self , property_id : int , value : str , case_sensitive : bool ):
58
- obx_qb_less_or_equal_string (self ._c_builder , property_id , c_str (value ), case_sensitive )
72
+
73
+ def less_or_equal_string (self , prop : Union [int , str , Property ], value : str , case_sensitive : bool = True ):
74
+ prop_id = self ._get_property_id (prop )
75
+ obx_qb_less_or_equal_string (self ._c_builder , prop_id , c_str (value ), case_sensitive )
59
76
return self
60
-
61
- def equals_int (self , property_id : int , value : int ):
62
- obx_qb_equals_int (self ._c_builder , property_id , value )
77
+
78
+ def equals_int (self , prop : Union [int , str , Property ], value : int ):
79
+ prop_id = self ._get_property_id (prop )
80
+ obx_qb_equals_int (self ._c_builder , prop_id , value )
63
81
return self
64
-
65
- def not_equals_int (self , property_id : int , value : int ):
66
- obx_qb_not_equals_int (self ._c_builder , property_id , value )
82
+
83
+ def not_equals_int (self , prop : Union [int , str , Property ], value : int ):
84
+ prop_id = self ._get_property_id (prop )
85
+ obx_qb_not_equals_int (self ._c_builder , prop_id , value )
67
86
return self
68
-
69
- def greater_than_int (self , property_id : int , value : int ):
70
- obx_qb_greater_than_int (self ._c_builder , property_id , value )
87
+
88
+ def greater_than_int (self , prop : Union [int , str , Property ], value : int ):
89
+ prop_id = self ._get_property_id (prop )
90
+ obx_qb_greater_than_int (self ._c_builder , prop_id , value )
71
91
return self
72
-
73
- def greater_or_equal_int (self , property_id : int , value : int ):
74
- obx_qb_greater_or_equal_int (self ._c_builder , property_id , value )
92
+
93
+ def greater_or_equal_int (self , prop : Union [int , str , Property ], value : int ):
94
+ prop_id = self ._get_property_id (prop )
95
+ obx_qb_greater_or_equal_int (self ._c_builder , prop_id , value )
75
96
return self
76
-
77
- def less_than_int (self , property_id : int , value : int ):
78
- obx_qb_less_than_int (self ._c_builder , property_id , value )
97
+
98
+ def less_than_int (self , prop : Union [int , str , Property ], value : int ):
99
+ prop_id = self ._get_property_id (prop )
100
+ obx_qb_less_than_int (self ._c_builder , prop_id , value )
79
101
return self
80
-
81
- def less_or_equal_int (self , property_id : int , value : int ):
82
- obx_qb_less_or_equal_int (self ._c_builder , property_id , value )
102
+
103
+ def less_or_equal_int (self , prop : Union [int , str , Property ], value : int ):
104
+ prop_id = self ._get_property_id (prop )
105
+ obx_qb_less_or_equal_int (self ._c_builder , prop_id , value )
83
106
return self
84
-
85
- def between_2ints (self , property_id : int , value_a : int , value_b : int ):
86
- obx_qb_between_2ints (self ._c_builder , property_id , value_a , value_b )
107
+
108
+ def between_2ints (self , prop : Union [int , str , Property ], value_a : int , value_b : int ):
109
+ prop_id = self ._get_property_id (prop )
110
+ obx_qb_between_2ints (self ._c_builder , prop_id , value_a , value_b )
87
111
return self
88
112
89
- def nearest_neighbors_f32 (self , vector_property_id : int , query_vector : Union [np .ndarray , List [float ]], element_count : int ):
113
+ def nearest_neighbors_f32 (self , prop : Union [int , str , Property ], query_vector : Union [np .ndarray , List [float ]],
114
+ element_count : int ):
90
115
if isinstance (query_vector , np .ndarray ):
91
116
if query_vector .dtype != np .float32 :
92
117
raise Exception (f"query_vector dtype must be float32" )
93
118
query_vector_data = query_vector .ctypes .data_as (ctypes .POINTER (ctypes .c_float ))
94
119
else : # List[float]
95
120
query_vector_data = (ctypes .c_float * len (query_vector ))(* query_vector )
96
- obx_qb_nearest_neighbors_f32 (self ._c_builder , vector_property_id , query_vector_data , element_count )
121
+
122
+ prop_id = self ._get_property_id (prop )
123
+ obx_qb_nearest_neighbors_f32 (self ._c_builder , prop_id , query_vector_data , element_count )
97
124
return self
98
125
99
126
def build (self ) -> Query :
0 commit comments