22import numpy as np
33from typing import *
44
5+ from objectbox .model .properties import Property
56from objectbox .objectbox import ObjectBox
67from objectbox .query import Query
78from objectbox .c import *
@@ -13,87 +14,113 @@ def __init__(self, ob: ObjectBox, box: 'Box'):
1314 self ._entity = box ._entity
1415 self ._c_builder = obx_query_builder (ob ._c_store , box ._entity .id )
1516
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+
1624 def close (self ) -> int :
17- return obx_qb_close (self )
25+ return obx_qb_close (self . _c_builder )
1826
1927 def error_code (self ) -> int :
20- return obx_qb_error_code (self )
21-
28+ return obx_qb_error_code (self . _c_builder )
29+
2230 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 )
2736 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 )
3141 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 )
3546 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 )
3951 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 )
4356 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 )
4761 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 )
5166 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 )
5571 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 )
5976 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 )
6381 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 )
6786 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 )
7191 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 )
7596 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 )
79101 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 )
83106 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 )
87111 return self
88112
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 ):
90115 if isinstance (query_vector , np .ndarray ):
91116 if query_vector .dtype != np .float32 :
92117 raise Exception (f"query_vector dtype must be float32" )
93118 query_vector_data = query_vector .ctypes .data_as (ctypes .POINTER (ctypes .c_float ))
94119 else : # List[float]
95120 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 )
97124 return self
98125
99126 def build (self ) -> Query :
0 commit comments