Skip to content

Commit 8154657

Browse files
committed
Allow to specify the precision of time clauses in the query builder
1 parent 7d01804 commit 8154657

File tree

2 files changed

+52
-12
lines changed

2 files changed

+52
-12
lines changed

influxdb-client/QueryBuilder.m

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -107,67 +107,79 @@
107107
end
108108

109109
% Specify before time constraint
110-
function obj = before(obj, before)
110+
function obj = before(obj, before, precision)
111+
if nargin < 3 || isempty(precision)
112+
precision = 'ms';
113+
end
111114
if isempty(before)
112115
obj.Before = [];
113116
elseif ischar(before)
114117
obj.Before = ['time < ''' before ''''];
115118
elseif isdatetime(before)
116-
str = TimeUtils.formatDatetime(before, 'ms', true);
119+
str = TimeUtils.formatDatetime(before, precision, true);
117120
obj.Before = ['time < ' str];
118121
elseif isfloat(before)
119-
str = TimeUtils.formatDatenum(before, 'ms', true);
122+
str = TimeUtils.formatDatenum(before, precision, true);
120123
obj.Before = ['time < ' str];
121124
else
122125
error('unsupported before type');
123126
end
124127
end
125128

126129
% Specify before or equals time constraint
127-
function obj = beforeEquals(obj, before)
130+
function obj = beforeEquals(obj, before, precision)
131+
if nargin < 3 || isempty(precision)
132+
precision = 'ms';
133+
end
128134
if isempty(before)
129135
obj.Before = [];
130136
elseif ischar(before)
131137
obj.Before = ['time <= ''' before ''''];
132138
elseif isdatetime(before)
133-
str = TimeUtils.formatDatetime(before, 'ms', true);
139+
str = TimeUtils.formatDatetime(before, precision, true);
134140
obj.Before = ['time <= ' str];
135141
elseif isfloat(before)
136-
str = TimeUtils.formatDatenum(before, 'ms', true);
142+
str = TimeUtils.formatDatenum(before, precision, true);
137143
obj.Before = ['time <= ' str];
138144
else
139145
error('unsupported before type');
140146
end
141147
end
142148

143149
% Specify after time constraint
144-
function obj = after(obj, after)
150+
function obj = after(obj, after, precision)
151+
if nargin < 3 || isempty(precision)
152+
precision = 'ms';
153+
end
145154
if isempty(after)
146155
obj.After = [];
147156
elseif ischar(after)
148157
obj.After = ['time > ''' after ''''];
149158
elseif isdatetime(after)
150-
str = TimeUtils.formatDatetime(after, 'ms', true);
159+
str = TimeUtils.formatDatetime(after, precision, true);
151160
obj.After = ['time > ' str];
152161
elseif isfloat(after)
153-
str = TimeUtils.formatDatenum(after, 'ms', true);
162+
str = TimeUtils.formatDatenum(after, precision, true);
154163
obj.After = ['time > ' str];
155164
else
156165
error('unsupported before type');
157166
end
158167
end
159168

160169
% Specify after time constraint
161-
function obj = afterEquals(obj, after)
170+
function obj = afterEquals(obj, after, precision)
171+
if nargin < 3 || isempty(precision)
172+
precision = 'ms';
173+
end
162174
if isempty(after)
163175
obj.After = [];
164176
elseif ischar(after)
165177
obj.After = ['time >= ''' after ''''];
166178
elseif isdatetime(after)
167-
str = TimeUtils.formatDatetime(after, 'ms', true);
179+
str = TimeUtils.formatDatetime(after, precision, true);
168180
obj.After = ['time >= ' str];
169181
elseif isfloat(after)
170-
str = TimeUtils.formatDatenum(after, 'ms', true);
182+
str = TimeUtils.formatDatenum(after, precision, true);
171183
obj.After = ['time >= ' str];
172184
else
173185
error('unsupported before type');

tests/QueryBuilderTest.m

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,34 @@ function before_and_after_are_combined_with_others(test)
246246
' AND temperature > 24.3'];
247247
test.verifyEqual(q.build(), exp);
248248
end
249+
250+
function before_and_equals_support_different_precisions(test)
251+
time = datetime(1529933525520 / 1000, 'ConvertFrom', 'posixtime');
252+
precisions = struct( ...
253+
'ns', '1529933525520000000ns', ...
254+
'u', '1529933525520000u', ...
255+
'ms', '1529933525520ms', ...
256+
's', '1529933526s', ...
257+
'm', '25498892m', ...
258+
'h', '424982h');
259+
names = fieldnames(precisions);
260+
for i = 1:length(names)
261+
name = names{i};
262+
value = precisions.(name);
263+
% Before
264+
q = QueryBuilder('weather').before(time, name);
265+
test.verifyTrue(endsWith(q.build(), ['time < ' value]));
266+
% BeforeEquals
267+
q = QueryBuilder('weather').beforeEquals(time, name);
268+
test.verifyTrue(endsWith(q.build(), ['time <= ' value]));
269+
% After
270+
q = QueryBuilder('weather').after(time, name);
271+
test.verifyTrue(endsWith(q.build(), ['time > ' value]));
272+
% AfterEquals
273+
q = QueryBuilder('weather').afterEquals(time, name);
274+
test.verifyTrue(endsWith(q.build(), ['time >= ' value]));
275+
end
276+
end
249277
end
250278

251279
end

0 commit comments

Comments
 (0)