New upstream version 2.0.52
authorPaul Gevers <elbrus@debian.org>
Thu, 26 Sep 2024 16:57:23 +0000 (18:57 +0200)
committerPaul Gevers <elbrus@debian.org>
Thu, 26 Sep 2024 16:57:23 +0000 (18:57 +0200)
debian/changelog
grammar/grammar.py
include/siri/version.h
itest/Dockerfile
itest/querygenerator/k_map.py
itest/querygenerator/querygenerator.py
itest/run_all.py
itest/test_integer_load.py
itest/test_log.py
itest/test_parentheses.py
src/siri/db/points.c

index fbb397e5a03aaae6c7c8a3b306aaa6da2231fbeb..e1dc9dd60a7adf9b4c1a6b0ac29d6d15c066d998 100644 (file)
@@ -1,3 +1,10 @@
+siridb-server (2.0.52-0~cb1) unstable; urgency=medium
+
+  * New upstream release
+    - Fixed potential bug with empty log log lines in series.
+
+ -- Jeroen van der Heijden <jeroen@cesbit.com>  Mon, 23 Sep 2024 16:57:00 +0200
+
 siridb-server (2.0.50-0~cb1) unstable; urgency=medium
 
   * New upstream release
index 8a7b4c5a7bdeb587aac4adec6bb530b53b8c10f7..fa705c94d0de2f4a390d5b42e77fdbc3fef125c3 100644 (file)
@@ -31,7 +31,7 @@ class SiriGrammar(Grammar):
     RE_KEYWORDS = re.compile('[a-z_]+')
 
     # Regular expressions
-    r_float = Regex('[-+]?[0-9]*\.?[0-9]+')
+    r_float = Regex(r'[-+]?[0-9]*\.?[0-9]+')
     r_integer = Regex('[-+]?[0-9]+')
     r_uinteger = Regex('[0-9]+')
     r_time_str = Regex('[0-9]+[smhdw]')
@@ -39,7 +39,7 @@ class SiriGrammar(Grammar):
     r_doubleq_str = Regex('(?:"(?:[^"]*)")+')
     r_grave_str = Regex('(?:`(?:[^`]*)`)+')
     r_uuid_str = Regex(
-        '[0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12}')
+        r'[0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12}')
     # we only allow an optional 'i' for case-insensitive regex
     r_regex = Regex('(/[^/\\\\]*(?:\\\\.[^/\\\\]*)*/i?)')
     r_comment = Regex('#.*')
index e0fcbe6bdacc4087954e1ec14327ec99f3be5f69..07f5d401f822941aa6563f9e28ba9c080b576e30 100644 (file)
@@ -6,7 +6,7 @@
 
 #define SIRIDB_VERSION_MAJOR 2
 #define SIRIDB_VERSION_MINOR 0
-#define SIRIDB_VERSION_PATCH 51
+#define SIRIDB_VERSION_PATCH 52
 
 /*
  * Use SIRIDB_VERSION_PRE_RELEASE for alpha release versions.
index 688cfa02360354e6656791b27302544d9fff7fbd..c9ae84292c956438d6336d2664b6fba4b4b57011 100644 (file)
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04 as builder
+FROM ubuntu:18.04 AS builder
 RUN apt-get update && \
     apt-get install -y \
         libcleri-dev \
index df1ec550713360cb0082d6de9a94b3d0c8f7c845..ee89e9e748c02761783273c989acc1a28375b4bb 100644 (file)
@@ -94,4 +94,4 @@ k_map = {
     'r_comment': {
         'r_comment': '#',
     },
-}
\ No newline at end of file
+}
index 4c53478fa49bdb9b43721dd55f668e38748131fa..68e83acee77c2fdf1ed5b276129884d39a7af142 100644 (file)
@@ -58,9 +58,8 @@ class QueryGenerator(list):
                     q[i] = val
                     yield q
                     break
-        
+
         # debug code
-        
         #     else:
         #         print('no value found for:')
         #         print(ename)
@@ -71,7 +70,6 @@ class QueryGenerator(list):
         #     print('unknown regex element')
         #     print(ename)
 
-
     def _on_Token(self, q, i):
         q[i] = q[i]._token
         yield q
index 2574d6000f5b7358d23d71ac50eb1a534d2c7296..c8eb599db74266f34c340fdd92d3925733627810 100644 (file)
@@ -7,7 +7,7 @@ from test_buffer import TestBuffer
 from test_compression import TestCompression
 from test_create_database import TestCreateDatabase
 from test_expiration import TestExpiration
-from test_grammar import TestGrammar
+from test_grammar import TestGrammar
 from test_group import TestGroup
 from test_http_api import TestHTTPAPI
 from test_insert import TestInsert
@@ -31,7 +31,7 @@ if __name__ == '__main__':
     run_test(TestCompression())
     run_test(TestCreateDatabase())
     run_test(TestExpiration())
-    run_test(TestGrammar())
+    run_test(TestGrammar())
     run_test(TestGroup())
     run_test(TestHTTPAPI())
     run_test(TestInsert())
index acb0e4b540305e804f4ce415b5760ad76af8a76b..6ce50856e8c0911ceeceff6784b959d022c2975a 100644 (file)
@@ -38,14 +38,14 @@ class TestIntegerLoad(TestBase):
 
     async def select(self, client, series, n):
         series = {s.name: s for s in series}
-        chars=string.ascii_letters + string.digits
+        chars = string.ascii_letters + string.digits
         for _ in range(n):
             regex = ''.join(random.choice(chars) for _ in range(3))
-            res = await client.query(f'select max() prefix "max-", min() prefix "min-", mean() prefix "mean-" from /.*{regex}.*/i')
-            if res:
-                print(res)
-            for s, p in res.items():
-                self.assertEqual(sorted(series[s].points), p)
+            res = await client.query(
+                f'select max() prefix "max-", min() prefix "min-", '
+                f'mean() prefix "mean-" from /.*{regex}.*/i')
+            for s, p in res.items():
+                self.assertEqual(sorted(series[s].points), p)
             await asyncio.sleep(0.2)
 
     async def insert(self, client, series, n):
index f293cf707be0384fe99a0ada5993eee7a19a0191..3808294e62e5ac39865fec92ef0504fd9211e48f 100644 (file)
@@ -21,6 +21,15 @@ from testing import parse_args
 
 
 DATA = {
+    'empty': [
+        [1471254710, ''],
+        [1471254712, ''],
+        [1471254714, ''],
+        [1471254715, ''],
+        [1471254716, ''],
+        [1471254718, ''],
+        [1471254720, '']
+    ],
     'log': [
         [1471254710, 'log line one'],
         [1471254712, 'log line two'],
@@ -234,6 +243,10 @@ class TestLog(TestBase):
         await self.test_data()
 
     async def test_data(self):
+        self.assertEqual(
+            await self.client0.query('select * from "empty"'),
+            {'empty': DATA['empty']})
+
         self.assertEqual(
             await self.client0.query('select * from "log"'),
             {'log': DATA['log']})
index 3d66657fbb229825b6a7a0913721e735a20264d8..715c88a8e4f489c525b63aedda30e509ece5222f 100644 (file)
@@ -273,8 +273,8 @@ class TestParenth(TestBase):
 
         with self.assertRaisesRegex(
                 QueryError,
-                'Query error at position 29. Expecting \*, all, '
-                'single_quote_str, double_quote_str or \('):
+                r'Query error at position 29. Expecting \*, all, '
+                r'single_quote_str, double_quote_str or \('):
             await self.client0.query(
                 'list series /.*/ - {}{}'.format('(' * 10, ')' * 10))
 
index e1004bbee557c6e6adcc5c080dd6dc4ea187110a..d0759f555c4f5dfa1d581c18cf2d664224085ffa 100644 (file)
@@ -1118,7 +1118,6 @@ static int POINTS_unpack_string(
         {
             /* literal */
             size_t len = (is_ascii) ? 0 : POINTS_dec_len(&pt);
-
             do
             {
                 *buf = *pt;
@@ -1228,12 +1227,6 @@ int siridb_points_unzip_string(
     memcpy(&point->ts, pt, sizeof(uint64_t));
     pt += sizeof(uint64_t);
 
-    buf = malloc(src_sz);
-    if (buf == NULL)
-    {
-        return -1;
-    }
-
     for (mask = 0; tshift-- > tcount; ++pt)
     {
         mask |= ((uint64_t) *pt) << (tshift * 8);
@@ -1265,6 +1258,12 @@ int siridb_points_unzip_string(
 
     n -= i;
 
+    buf = malloc(src_sz + n);
+    if (buf == NULL)
+    {
+        return -1;
+    }
+
     if (POINTS_unpack_string(
             points->data + points->len, n, i, bits + offset, buf))
     {