| 736 | } // anon namespace |
| 737 | |
| 738 | void ArithmeticNode::make(DsqlCompilerScratch* dsqlScratch, dsc* desc) |
| 739 | { |
| 740 | dsc desc1, desc2; |
| 741 | |
| 742 | DsqlDescMaker::fromNode(dsqlScratch, &desc1, arg1); |
| 743 | DsqlDescMaker::fromNode(dsqlScratch, &desc2, arg2); |
| 744 | |
| 745 | if (desc1.isNull()) |
| 746 | { |
| 747 | desc1 = desc2; |
| 748 | desc1.setNull(); |
| 749 | } |
| 750 | |
| 751 | if (desc2.isNull()) |
| 752 | { |
| 753 | desc2 = desc1; |
| 754 | desc2.setNull(); |
| 755 | } |
| 756 | |
| 757 | if (nodeIs<NullNode>(arg1) && nodeIs<NullNode>(arg2)) |
| 758 | { |
| 759 | // NULL + NULL = NULL of INT |
| 760 | desc->makeLong(0); |
| 761 | desc->setNullable(true); |
| 762 | } |
| 763 | else if (dialect1) |
| 764 | makeDialect1(desc, desc1, desc2); |
| 765 | else |
| 766 | makeDialect3(desc, desc1, desc2); |
| 767 | } |
| 768 | |
| 769 | void ArithmeticNode::makeDialect1(dsc* desc, dsc& desc1, dsc& desc2) |
| 770 | { |
nothing calls this directly
no test coverage detected