durable_rules 2.0.18 → 2.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a5400f2cda8c4df0f9d4df9b93c5b0ce70896411
4
- data.tar.gz: f2e209f3d9275874bf3c5670f81e7dadb749c8f4
3
+ metadata.gz: 4f68e8be526e46e47b904f1b0a0af0c00ffa58f5
4
+ data.tar.gz: 31f9916994a145c2c27b891ce93f9d7795b5c22b
5
5
  SHA512:
6
- metadata.gz: 9a4f16be8c4fbda5abe5348bbdc114e8387cb97f2ead7797ffae0b6b89c037caad7e07a77c875505687ebff601cb293389d6f0d7e76c6c597d0e81403a885786
7
- data.tar.gz: 76e38364859de5984b1ac6eb751d3e10028e7eecd723d139910cf8bf9b1d8cb12b97bda35d219eb7baf92f1149ea3dd37e2dbbb987afcbd960eaa9217dc24815
6
+ metadata.gz: efd950c601e441e71505e9c43935f112b1a223495d487fff180738356ad3c79431a1aa316df59663d13178c5f6e4aaf46f7e0ab4d7cc6f41c9d1c8a8a1855815
7
+ data.tar.gz: cdb9502e03383280a6ee9ef39ea105f5cd75ae1050744f5b0111ab73144a08e56dc79fdb094046013b9be2f4c16c4cbcf75a838afc7f75b6cc16fe571d15afbc
data/src/rules/events.c CHANGED
@@ -474,7 +474,7 @@ static unsigned int reduceExpression(ruleset *tree,
474
474
  jsonObject *leftMessageObject,
475
475
  jsonObject *rightMessageObject,
476
476
  leftFrameNode *context,
477
- jsonProperty *targetProperty) {
477
+ jsonProperty *targetProperty) {
478
478
  jsonProperty leftValue;
479
479
  jsonProperty *leftProperty = &leftValue;
480
480
  CHECK_RESULT(reduceOperand(tree,
@@ -505,10 +505,12 @@ static unsigned int reduceExpression(ruleset *tree,
505
505
  context,
506
506
  &rightProperty));
507
507
 
508
- return reduceProperties(currentExpression->operator,
508
+ unsigned int result = reduceProperties(currentExpression->operator,
509
509
  leftProperty,
510
510
  rightProperty,
511
511
  targetProperty);
512
+
513
+ return result;
512
514
  }
513
515
 
514
516
  static unsigned int reduceExpressionSequence(ruleset *tree,
@@ -527,56 +529,40 @@ static unsigned int reduceExpressionSequence(ruleset *tree,
527
529
  return RULES_OK;
528
530
  }
529
531
 
530
- if ((operator != OP_NOP) &&
531
- ((operator == OP_OR && targetProperty->value.b) ||
532
- (operator == OP_AND && !targetProperty->value.b))) {
533
- if (currentExpression->operator == OP_AND || currentExpression->operator == OP_OR) {
534
- jsonProperty dummyProperty;
535
- dummyProperty.type = JSON_BOOL;
536
- if (currentExpression->operator == OP_AND) {
537
- dummyProperty.value.b = 0;
538
- } else {
539
- dummyProperty.value.b = 1;
540
- }
541
-
542
- ++*i;
543
- CHECK_RESULT(reduceExpressionSequence(tree,
544
- state,
545
- exprs,
546
- currentExpression->operator,
547
- messageObject,
548
- context,
549
- i,
550
- &dummyProperty));
551
- }
532
+ if (currentExpression->operator == OP_AND || currentExpression->operator == OP_OR) {
533
+ ++*i;
534
+ CHECK_RESULT(reduceExpressionSequence(tree,
535
+ state,
536
+ exprs,
537
+ currentExpression->operator,
538
+ messageObject,
539
+ context,
540
+ i,
541
+ targetProperty));
552
542
  } else {
553
- if (currentExpression->operator == OP_AND || currentExpression->operator == OP_OR) {
543
+ CHECK_RESULT(reduceExpression(tree,
544
+ state,
545
+ currentExpression,
546
+ messageObject,
547
+ messageObject,
548
+ context,
549
+ targetProperty));
550
+ ++*i;
551
+ }
552
+
553
+ if (targetProperty->type != JSON_BOOL) {
554
+ return ERR_OPERATION_NOT_SUPPORTED;
555
+ }
556
+
557
+
558
+ if ((operator == OP_AND && !targetProperty->value.b) ||
559
+ (operator == OP_OR && targetProperty->value.b)) {
560
+ while (currentExpression->operator != OP_END) {
554
561
  ++*i;
555
- CHECK_RESULT(reduceExpressionSequence(tree,
556
- state,
557
- exprs,
558
- currentExpression->operator,
559
- messageObject,
560
- context,
561
- i,
562
- targetProperty));
563
- } else if (currentExpression->operator == OP_IALL || currentExpression->operator == OP_IANY) {
564
-
565
- } else {
566
- CHECK_RESULT(reduceExpression(tree,
567
- state,
568
- currentExpression,
569
- messageObject,
570
- messageObject,
571
- context,
572
- targetProperty));
573
- if (targetProperty->type != JSON_BOOL) {
574
- return ERR_OPERATION_NOT_SUPPORTED;
575
- }
562
+ currentExpression = &exprs->expressions[*i];
576
563
  }
564
+ return RULES_OK;
577
565
  }
578
-
579
- ++*i;
580
566
  }
581
567
 
582
568
  return RULES_OK;
@@ -665,27 +651,32 @@ static unsigned int getFrameHash(ruleset *tree,
665
651
  context,
666
652
  hash);
667
653
  }
668
- } else if (exprs->length > 0) {
669
- if (exprs->expressions[0].operator == OP_AND) {
670
- *hash = FNV_32_OFFSET_BASIS;
671
- unsigned int result;
672
- for (unsigned int i = 1; i < exprs->length; ++ i) {
673
-
674
- if (exprs->expressions[i].operator == OP_EQ) {
675
- unsigned int newHash;
676
- result = getFrameHashForExpression(tree,
677
- state,
678
- &exprs->expressions[i],
679
- messageObject,
680
- context,
681
- &newHash);
682
- if (result == RULES_OK) {
683
- *hash ^= newHash;
684
- *hash *= FNV_32_PRIME;
685
- }
654
+ } else if (exprs->length > 0 && exprs->expressions[0].operator == OP_AND) {
655
+
656
+ unsigned int result;
657
+ unsigned int i = 1;
658
+ while (exprs->expressions[i].operator != OP_OR && exprs->expressions[i].operator != OP_END) {
659
+ if (i == 1) {
660
+ *hash = FNV_32_OFFSET_BASIS;
661
+ }
662
+
663
+ if (exprs->expressions[i].operator == OP_EQ) {
664
+ unsigned int newHash;
665
+ result = getFrameHashForExpression(tree,
666
+ state,
667
+ &exprs->expressions[i],
668
+ messageObject,
669
+ context,
670
+ &newHash);
671
+ if (result == RULES_OK) {
672
+ *hash ^= newHash;
673
+ *hash *= FNV_32_PRIME;
686
674
  }
687
675
  }
676
+
677
+ ++i;
688
678
  }
679
+
689
680
  }
690
681
 
691
682
  return RULES_OK;
@@ -1381,21 +1372,47 @@ static unsigned int handleBetaMessage(ruleset *tree,
1381
1372
  sideEffect);
1382
1373
  }
1383
1374
 
1375
+ unsigned int messageHash;
1376
+ CHECK_RESULT(getFrameHash(tree,
1377
+ state,
1378
+ &betaNode->value.b,
1379
+ messageObject,
1380
+ NULL,
1381
+ &messageHash));
1382
+
1384
1383
  frameLocation rightFrameLocation;
1385
1384
  rightFrameNode *rightFrame;
1386
1385
 
1386
+ CHECK_RESULT(getLastRightFrame(state,
1387
+ betaNode->value.b.index,
1388
+ messageHash,
1389
+ &rightFrame));
1390
+
1391
+ while (rightFrame) {
1392
+ if (rightFrame->messageOffset == currentMessageOffset) {
1393
+ return RULES_OK;
1394
+
1395
+ }
1396
+
1397
+ unsigned int rightFrameOffset = rightFrame->prevOffset;
1398
+ rightFrame = NULL;
1399
+ while (rightFrameOffset != UNDEFINED_HASH_OFFSET && !rightFrame) {
1400
+ rightFrame = RIGHT_FRAME_NODE(state,
1401
+ betaNode->value.b.index,
1402
+ rightFrameOffset);
1403
+ if (rightFrame->hash != messageHash) {
1404
+ rightFrameOffset = rightFrame->prevOffset;
1405
+ rightFrame = NULL;
1406
+ }
1407
+ }
1408
+ }
1409
+
1387
1410
  CHECK_RESULT(createRightFrame(state,
1388
1411
  betaNode,
1389
1412
  &rightFrame,
1390
1413
  &rightFrameLocation));
1391
1414
 
1392
- unsigned int messageHash;
1393
- CHECK_RESULT(getFrameHash(tree,
1394
- state,
1395
- &betaNode->value.b,
1396
- messageObject,
1397
- NULL,
1398
- &messageHash));
1415
+
1399
1416
 
1400
1417
  rightFrame->messageOffset = currentMessageOffset;
1401
1418
  CHECK_RESULT(addFrameLocation(state,
data/src/rules/rete.c CHANGED
@@ -348,7 +348,6 @@ static unsigned char compareValue(ruleset *tree,
348
348
  char *last,
349
349
  identifier *id,
350
350
  unsigned char type) {
351
-
352
351
  if (right->type != type) {
353
352
  return 0;
354
353
  }
@@ -1009,6 +1008,7 @@ static unsigned int findAlpha(ruleset *tree,
1009
1008
  }
1010
1009
  }
1011
1010
  }
1011
+
1012
1012
  }
1013
1013
  }
1014
1014
 
@@ -1251,7 +1251,6 @@ static unsigned int createAlpha(ruleset *tree,
1251
1251
  0,
1252
1252
  single_offset,
1253
1253
  *newOffset));
1254
-
1255
1254
 
1256
1255
  result = readNextArrayValue(last,
1257
1256
  &first,
data/src/rules/rete.h CHANGED
@@ -1,6 +1,6 @@
1
1
  #include "state.h"
2
2
 
3
- // #define _PRINT 1
3
+ //#define _PRINT 1
4
4
 
5
5
  #define OP_NOP 0
6
6
  #define OP_LT 0x01
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: durable_rules
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.18
4
+ version: 2.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jesus Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-26 00:00:00.000000000 Z
11
+ date: 2020-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake