You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-10-31 18:30:33 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			948 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			948 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* Copyright (C) 2014 InfiniDB, Inc.
 | |
| 
 | |
|    This program is free software; you can redistribute it and/or
 | |
|    modify it under the terms of the GNU General Public License
 | |
|    as published by the Free Software Foundation; version 2 of
 | |
|    the License.
 | |
| 
 | |
|    This program is distributed in the hope that it will be useful,
 | |
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|    GNU General Public License for more details.
 | |
| 
 | |
|    You should have received a copy of the GNU General Public License
 | |
|    along with this program; if not, write to the Free Software
 | |
|    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 | |
|    MA 02110-1301, USA. */
 | |
| 
 | |
| /***********************************************************************
 | |
|  *   $Id: tdriver.cpp 2035 2013-01-21 14:12:19Z rdempsey $
 | |
|  *
 | |
|  *
 | |
|  ***********************************************************************/
 | |
| #include <ctime>
 | |
| #include <string>
 | |
| #include <sstream>
 | |
| #include <exception>
 | |
| #include <iostream>
 | |
| #include <fstream>
 | |
| #include <unistd.h>
 | |
| #include <vector>
 | |
| #include <cassert>
 | |
| 
 | |
| #include "bytestream.h"
 | |
| #include "messagequeue.h"
 | |
| using namespace messageqcpp;
 | |
| 
 | |
| #include <boost/program_options.hpp>
 | |
| namespace po = boost::program_options;
 | |
| 
 | |
| #include "PrimitiveMsg.h"
 | |
| 
 | |
| using namespace std;
 | |
| using namespace messageqcpp;
 | |
| 
 | |
| void testColByScan()
 | |
| {
 | |
|     cout << "Sending COL_BY_SCAN primitive" << endl;
 | |
| 
 | |
|     MessageQueueClient proc("PMS1");
 | |
|     ByteStream obs,ibs;
 | |
| 
 | |
|     ISMPacketHeader packetHeader;
 | |
|     packetHeader.Reserve = 0;
 | |
|     packetHeader.Flow = 0;
 | |
|     packetHeader.Command = COL_BY_SCAN;
 | |
|     packetHeader.Size = (sizeof(ISMPacketHeader) + sizeof(ColByScanRequestHeader));
 | |
|     packetHeader.Type = 2;
 | |
|     packetHeader.Source = 0;
 | |
|     packetHeader.Dest = 0;
 | |
|     packetHeader.FinalDest = 0;
 | |
| 
 | |
|     ColByScanRequestHeader colScan;
 | |
|     colScan.Hdr.SessionID = 1;
 | |
|     colScan.Hdr.StatementID = 1;
 | |
|     colScan.Hdr.TransactionID = 0;
 | |
|     colScan.Hdr.VerID = 0;
 | |
|     colScan.LBID = 0;
 | |
|     colScan.PBID = 0;
 | |
|     colScan.DataSize = 8;
 | |
|     colScan.OutputType = 1;
 | |
|     colScan.BOP = 0;
 | |
|     colScan.NOPS = 0;
 | |
|     colScan.NVALS = 1;
 | |
| 
 | |
|     Int64 TempData;
 | |
|     TempData = 1;
 | |
| 
 | |
|     unsigned char message[10000];
 | |
| 
 | |
|     memmove(message, &packetHeader, sizeof(ISMPacketHeader) );
 | |
|     memmove(message + sizeof(ISMPacketHeader), &colScan, sizeof(ColByScanRequestHeader) );
 | |
|     memmove(message + sizeof(ISMPacketHeader) + sizeof(ColByScanRequestHeader),  &TempData, sizeof(Int64));
 | |
| 
 | |
|     obs.append((messageqcpp::ByteStream::byte*)message, sizeof(ISMPacketHeader) + sizeof(ColByScanRequestHeader) + sizeof(Int64));
 | |
| 
 | |
|     cout << "Sending to Primitive Server" << endl;
 | |
|     proc.write( obs );
 | |
| 
 | |
|     // TODO process results
 | |
|     cout << "Sent... awaiting results" << endl;
 | |
| 
 | |
|     ibs = proc.read();
 | |
|     int messageLen = ibs.length();
 | |
|     if (messageLen)
 | |
|     {
 | |
|         cout << "Received results" << endl << endl;
 | |
| 
 | |
|         ISMPacketHeader pktHeader;
 | |
|         ColResultHeader colResult;
 | |
| 
 | |
|         ByteStream::byte* bytePtr = new messageqcpp::ByteStream::byte[messageLen];
 | |
|         ibs >> bytePtr;
 | |
|         memmove(((char*)&pktHeader), bytePtr, sizeof(ISMPacketHeader));
 | |
|         memmove(((char*)&colResult), bytePtr + sizeof(ColResultHeader), sizeof(ColResultHeader) );
 | |
| 
 | |
|         int remaining = messageLen - sizeof(ISMPacketHeader) - sizeof(ColResultHeader);
 | |
| 
 | |
|         cout << "pktHeader.Reserve: " << pktHeader.Reserve << endl;
 | |
|         cout << "pktHeader.Flow: " << pktHeader.Flow << endl;
 | |
|         cout << "pktHeader.Command: " << pktHeader.Command << endl;
 | |
|         cout << "pktHeader.Size: " << pktHeader.Size << endl;
 | |
|         cout << "pktHeader.Type: " << pktHeader.Type << endl;
 | |
|         cout << "pktHeader.Source: " << pktHeader.Source << endl;
 | |
|         cout << "pktHeader.Dest: " << pktHeader.Dest << endl;
 | |
|         cout << "pktHeader.FinalDest: " << pktHeader.FinalDest << endl;
 | |
|         cout << "colResult.Hdr.SessionID: " << colResult.Hdr.SessionID << endl;
 | |
|         cout << "colResult.Hdr.StatementID: " << colResult.Hdr.StatementID << endl;
 | |
|         cout << "colResult.Hdr.TransactionID: " << colResult.Hdr.TransactionID << endl;
 | |
|         cout << "colResult.Hdr.VerID: " << colResult.Hdr.VerID << endl;
 | |
|         cout << "colResult.LBID: " << colResult.LBID << endl;
 | |
|         cout << "colResult.NVALS: " << colResult.NVALS << endl;
 | |
|         cout << "colResult.Pad1: " << colResult.Pad1 << endl;
 | |
|         cout << "colResult.Pad2: " << colResult.Pad2 << endl;
 | |
| 
 | |
|         cout << "Data" << endl;
 | |
|         cout << "----" << endl << endl;
 | |
|         cout << "Data Size: " << remaining << endl;
 | |
| 
 | |
|         if (remaining)
 | |
|         {
 | |
|             char* data = new char[remaining];
 | |
|             memmove(data, bytePtr + sizeof(ISMPacketHeader) + sizeof(ColResultHeader), remaining);
 | |
| 
 | |
|             char *ptr = data;
 | |
| 
 | |
|             for(int i = 0; i < remaining; i++)
 | |
|             {
 | |
|                 for (int j = 0; j < 10 && j < remaining; j++)
 | |
|                     printf("%02x ", *ptr++);
 | |
|                 printf("\n");
 | |
|             }
 | |
| 
 | |
|             delete []data;
 | |
|         }
 | |
| 
 | |
|         delete []bytePtr;
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| void testColByRid()
 | |
| {
 | |
|     cout << "Sending COL_BY_RID primitive" << endl;
 | |
| 
 | |
|     MessageQueueClient proc("PMS1");
 | |
|     ByteStream obs,ibs;
 | |
| 
 | |
|     ISMPacketHeader packetHeader;
 | |
|     packetHeader.Reserve = 0;
 | |
|     packetHeader.Flow = 0;
 | |
|     packetHeader.Command = COL_BY_RID;
 | |
|     packetHeader.Size = (sizeof(ISMPacketHeader) + sizeof(ColByRIDRequestHeader));
 | |
|     packetHeader.Type = 2;
 | |
|     packetHeader.Source = 0;
 | |
|     packetHeader.Dest = 0;
 | |
|     packetHeader.FinalDest = 0;
 | |
| 
 | |
|     ColByRIDRequestHeader colByRid;
 | |
|     colByRid.Hdr.SessionID = 1;
 | |
|     colByRid.Hdr.StatementID = 1;
 | |
|     colByRid.Hdr.TransactionID = 0;
 | |
|     colByRid.Hdr.VerID = 0;
 | |
|     colByRid.LBID = 0;
 | |
|     colByRid.PBID = 0;
 | |
|     colByRid.DataSize = 8;
 | |
|     colByRid.OutputType = 3;
 | |
|     colByRid.BOP = 0;
 | |
|     colByRid.NOPS = 0;
 | |
|     colByRid.NVALS = 1;
 | |
| 
 | |
|     Int64 TempData;
 | |
|     TempData = 1;
 | |
| 
 | |
|     unsigned char message[10000];
 | |
| 
 | |
|     memmove(message, &packetHeader, sizeof(ISMPacketHeader) );
 | |
|     memmove(message + sizeof(ISMPacketHeader), &colByRid, sizeof(ColByRIDRequestHeader) );
 | |
|     memmove(message + sizeof(ISMPacketHeader) + sizeof(ColByRIDRequestHeader),  &TempData, sizeof(Int64));
 | |
| 
 | |
|     obs.append((messageqcpp::ByteStream::byte*)message, sizeof(ISMPacketHeader) + sizeof(ColByRIDRequestHeader) + sizeof(Int64));
 | |
| 
 | |
|     cout << "Sending to Primitive Server" << endl;
 | |
| 
 | |
|     proc.write(obs);
 | |
| 
 | |
|     cout << "Sent... awaiting results" << endl;
 | |
| 
 | |
|     ibs = proc.read();
 | |
|     int messageLen = ibs.length();
 | |
|     if (messageLen)
 | |
|     {
 | |
| 
 | |
|         cout << "Received results" << endl << endl;
 | |
| 
 | |
|         ISMPacketHeader pktHeader;
 | |
|         ColResultHeader colResult;
 | |
| 
 | |
|         ByteStream::byte* bytePtr = new messageqcpp::ByteStream::byte[messageLen];
 | |
|         ibs >> bytePtr;
 | |
|         memmove(((char*)&pktHeader), bytePtr, sizeof(ISMPacketHeader));
 | |
|         memmove(((char*)&colResult), bytePtr + sizeof(ColResultHeader), sizeof(ColResultHeader) );
 | |
| 
 | |
|         int remaining = messageLen - sizeof(ISMPacketHeader) - sizeof(ColResultHeader);
 | |
| 
 | |
|         cout << "pktHeader.Reserve: " << pktHeader.Reserve << endl;
 | |
|         cout << "pktHeader.Flow: " << pktHeader.Flow << endl;
 | |
|         cout << "pktHeader.Command: " << pktHeader.Command << endl;
 | |
|         cout << "pktHeader.Size: " << pktHeader.Size << endl;
 | |
|         cout << "pktHeader.Type: " << pktHeader.Type << endl;
 | |
|         cout << "pktHeader.Source: " << pktHeader.Source << endl;
 | |
|         cout << "pktHeader.Dest: " << pktHeader.Dest << endl;
 | |
|         cout << "pktHeader.FinalDest: " << pktHeader.FinalDest << endl;
 | |
|         cout << "colResult.Hdr.SessionID: " << colResult.Hdr.SessionID << endl;
 | |
|         cout << "colResult.Hdr.StatementID: " << colResult.Hdr.StatementID << endl;
 | |
|         cout << "colResult.Hdr.TransactionID: " << colResult.Hdr.TransactionID << endl;
 | |
|         cout << "colResult.Hdr.VerID: " << colResult.Hdr.VerID << endl;
 | |
|         cout << "colResult.LBID: " << colResult.LBID << endl;
 | |
|         cout << "colResult.NVALS: " << colResult.NVALS << endl;
 | |
|         cout << "colResult.Pad1: " << colResult.Pad1 << endl;
 | |
|         cout << "colResult.Pad2: " << colResult.Pad2 << endl;
 | |
| 
 | |
|         cout << "Data" << endl;
 | |
|         cout << "----" << endl << endl;
 | |
|         cout << "Data Size: " << remaining << endl;
 | |
| 
 | |
|         if (remaining)
 | |
|         {
 | |
|             char* data = new char[remaining];
 | |
|             memmove(data, bytePtr + sizeof(ISMPacketHeader) + sizeof(ColResultHeader), remaining);
 | |
| 
 | |
|             char *ptr = data;
 | |
| 
 | |
|             for(int i = 0; i < remaining; i++)
 | |
|             {
 | |
|                 for (int j = 0; j < 10 && j < remaining; j++)
 | |
|                     printf("%02x ", *ptr++);
 | |
|                 printf("\n");
 | |
|             }
 | |
| 
 | |
|             delete []data;
 | |
|         }
 | |
| 
 | |
|         delete []bytePtr;
 | |
| 
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| void testColAggByScan()
 | |
| {
 | |
|     cout << "Sending COL_AGG_BY_SCAN primitive" << endl;
 | |
| 
 | |
|     MessageQueueClient proc("PMS1");
 | |
|     ByteStream obs,ibs;
 | |
| 
 | |
|     ISMPacketHeader packetHeader;
 | |
|     packetHeader.Reserve = 0;
 | |
|     packetHeader.Flow = 0;
 | |
|     packetHeader.Command = COL_AGG_BY_SCAN;
 | |
|     packetHeader.Size = (sizeof(ISMPacketHeader) + sizeof(ColAggByScanRequestHeader));
 | |
|     packetHeader.Type = 2;
 | |
|     packetHeader.Source = 0;
 | |
|     packetHeader.Dest = 0;
 | |
|     packetHeader.FinalDest = 0;
 | |
| 
 | |
|     ColAggByScanRequestHeader  colAggByScan;
 | |
|     colAggByScan.Hdr.SessionID = 1;
 | |
|     colAggByScan.Hdr.StatementID = 1;
 | |
|     colAggByScan.Hdr.TransactionID = 0;
 | |
|     colAggByScan.Hdr.VerID = 0;
 | |
|     colAggByScan.LBID = 0;
 | |
|     colAggByScan.PBID = 0;
 | |
|     colAggByScan.DataSize = 8;
 | |
|     colAggByScan.OutputType = 1;
 | |
|     colAggByScan.BOP = 0;
 | |
|     colAggByScan.NOPS = 0;
 | |
|     colAggByScan.NVALS = 1;
 | |
| 
 | |
|     Int64 TempData;
 | |
|     TempData = 1;
 | |
| 
 | |
|     unsigned char message[10000];
 | |
| 
 | |
|     memmove(message, &packetHeader, sizeof(ISMPacketHeader) );
 | |
|     memmove(message + sizeof(ISMPacketHeader), &colAggByScan, sizeof(ColAggByScanRequestHeader) );
 | |
|     memmove(message + sizeof(ISMPacketHeader) + sizeof(ColAggByScanRequestHeader),  &TempData, sizeof(Int64));
 | |
| 
 | |
|     obs.append((messageqcpp::ByteStream::byte*)message, sizeof(ISMPacketHeader) + sizeof(ColAggByScanRequestHeader)
 | |
|         + sizeof(Int64));
 | |
| 
 | |
|     cout << "Sending to Primitive Server" << endl;
 | |
| 
 | |
|     proc.write(obs);
 | |
| 
 | |
|     cout << "Sent... awaiting results" << endl;
 | |
| 
 | |
|     ibs = proc.read();
 | |
|     int messageLen = ibs.length();
 | |
|     if (messageLen)
 | |
|     {
 | |
|         ISMPacketHeader pktHeader;
 | |
|         ColAggResultHeader colAggResult;
 | |
| 
 | |
|         cout << "Received results" << endl << endl;
 | |
| 
 | |
|         ByteStream::byte* bytePtr = new messageqcpp::ByteStream::byte[messageLen];
 | |
|         ibs >> bytePtr;
 | |
|         memmove(((char*)&pktHeader), bytePtr, sizeof(ISMPacketHeader));
 | |
|         memmove(((char*)&colAggResult), bytePtr + sizeof(ColAggResultHeader), sizeof(ColAggResultHeader) );
 | |
| 
 | |
|         int remaining = messageLen - sizeof(ISMPacketHeader) - sizeof(ColAggResultHeader);
 | |
| 
 | |
|         cout << "pktHeader.Reserve: " << pktHeader.Reserve << endl;
 | |
|         cout << "pktHeader.Flow: " << pktHeader.Flow << endl;
 | |
|         cout << "pktHeader.Command: " << pktHeader.Command << endl;
 | |
|         cout << "pktHeader.Size: " << pktHeader.Size << endl;
 | |
|         cout << "pktHeader.Type: " << pktHeader.Type << endl;
 | |
|         cout << "pktHeader.Source: " << pktHeader.Source << endl;
 | |
|         cout << "pktHeader.Dest: " << pktHeader.Dest << endl;
 | |
|         cout << "pktHeader.FinalDest: " << pktHeader.FinalDest << endl;
 | |
|         cout << "colAggResult.Hdr.SessionID: " << colAggResult.Hdr.SessionID << endl;
 | |
|         cout << "colAggResult.Hdr.StatementID: " << colAggResult.Hdr.StatementID << endl;
 | |
|         cout << "colAggResult.Hdr.TransactionID: " << colAggResult.Hdr.TransactionID << endl;
 | |
|         cout << "colAggResult.Hdr.VerID: " << colAggResult.Hdr.VerID << endl;
 | |
|         cout << "colAggResult.LBID: " << colAggResult.LBID << endl;
 | |
|         cout << "colAggResult.MIN: " << colAggResult.MIN << endl;
 | |
|         cout << "colAggResult.MAX: " << colAggResult.MAX << endl;
 | |
|         cout << "colAggResult.SUM: " << colAggResult.SUM << endl;
 | |
|         cout << "colAggResult.SUMOverflow: " << colAggResult.SUMOverflow << endl;
 | |
|         cout << "colAggResult.NVALS: " << colAggResult.NVALS << endl;
 | |
|         cout << "colAggResult.Pad1: " << colAggResult.Pad1 << endl;
 | |
| 
 | |
|         cout << "Data" << endl;
 | |
|         cout << "----" << endl << endl;
 | |
|         cout << "Data Size: " << remaining << endl;
 | |
| 
 | |
|         if (remaining)
 | |
|         {
 | |
|             char* data = new char[remaining];
 | |
|             memmove(data, bytePtr + sizeof(ISMPacketHeader) + sizeof(ColResultHeader), remaining);
 | |
| 
 | |
|             char *ptr = data;
 | |
| 
 | |
|             for(int i = 0; i < remaining; i++)
 | |
|             {
 | |
|                 for (int j = 0; j < 10 && j < remaining; j++)
 | |
|                     printf("%02x ", *ptr++);
 | |
|                 printf("\n");
 | |
|             }
 | |
| 
 | |
|             delete []data;
 | |
|         }
 | |
| 
 | |
|         delete []bytePtr;
 | |
| 
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| void testColAggByRid()
 | |
| {
 | |
|     cout << "Sending COL_AGG_BY_RID primitive" << endl;
 | |
| 
 | |
|     MessageQueueClient proc("PMS1");
 | |
|     ByteStream obs,ibs;
 | |
| 
 | |
|     ByteStream::octbyte value64;
 | |
|     ByteStream::quadbyte value32;
 | |
|     ByteStream::doublebyte value16;
 | |
|     ByteStream::byte value8;
 | |
| 
 | |
|     ISMPacketHeader packetHeader;
 | |
|     packetHeader.Reserve = 0;
 | |
|     packetHeader.Flow = 0;
 | |
|     packetHeader.Command = COL_AGG_BY_RID;
 | |
|     packetHeader.Size = (sizeof(ISMPacketHeader) + sizeof(ColAggByRIDRequestHeader));
 | |
|     packetHeader.Type = 2;
 | |
|     packetHeader.Source = 0;
 | |
|     packetHeader.Dest = 0;
 | |
|     packetHeader.FinalDest = 0;
 | |
| 
 | |
|     ColAggByRIDRequestHeader colAggByRID;
 | |
|     colAggByRID.Hdr.SessionID = 1;
 | |
|     colAggByRID.Hdr.StatementID = 1;
 | |
|     colAggByRID.Hdr.TransactionID = 0;
 | |
|     colAggByRID.Hdr.VerID = 0;
 | |
|     colAggByRID.LBID = 0;
 | |
|     colAggByRID.PBID = 0;
 | |
|     colAggByRID.DataSize = 8;
 | |
|     colAggByRID.OutputType = 1;
 | |
|     colAggByRID.BOP = 0;
 | |
|     colAggByRID.NOPS = 0;
 | |
|     colAggByRID.NVALS = 0;
 | |
| 
 | |
|     cout << "ISMPacketHeader" << endl;
 | |
|     cout << "---------------" << endl << endl;
 | |
|     cout << "Reserve: " << packetHeader.Reserve << endl;
 | |
|     value32 = packetHeader.Reserve;
 | |
|     obs << value32;
 | |
| 
 | |
|     cout << "Flow: " << packetHeader.Flow << endl;
 | |
|     value16 = packetHeader.Flow;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Command: " << packetHeader.Command << endl;
 | |
|     value8 = packetHeader.Command;
 | |
|     obs << value8;
 | |
| 
 | |
|     cout << "Size: " << packetHeader.Size << endl;
 | |
|     value16 = packetHeader.Size;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Type: " << packetHeader.Type << endl;
 | |
|     value8 = packetHeader.Type;
 | |
|     obs << value8;
 | |
| 
 | |
|     cout << "Source: " << packetHeader.Source << endl;
 | |
|     value64 = packetHeader.Source;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "Dest: " << packetHeader.Dest << endl;
 | |
|     value64 = packetHeader.Dest;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "FinalDest: " << packetHeader.FinalDest << endl << endl;
 | |
|     value64 = packetHeader.FinalDest;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "ColAggByRIDRequestHeader.PrimitiveHeader" << endl;
 | |
|     cout << "--------------------------------------" << endl << endl;
 | |
|     cout << "SessionID: " << colAggByRID.Hdr.SessionID << endl;
 | |
|     value16 = colAggByRID.Hdr.SessionID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "StatementID: " << colAggByRID.Hdr.StatementID << endl;
 | |
|     value16 = colAggByRID.Hdr.StatementID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "TransactionID: " << colAggByRID.Hdr.TransactionID << endl;
 | |
|     value16 = colAggByRID.Hdr.TransactionID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "VerID: " << colAggByRID.Hdr.VerID << endl;
 | |
|     value16 = colAggByRID.Hdr.VerID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "ColAggByRIDRequestHeader" << endl;
 | |
|     cout << "-------------------------" << endl << endl;
 | |
| 
 | |
|     cout << "LBID: " << colAggByRID.LBID << endl;
 | |
|     value64 = colAggByRID.LBID;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "PBID: " << colAggByRID.PBID << endl;
 | |
|     value64 = colAggByRID.PBID;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "DataSize: " << colAggByRID.DataSize << endl;
 | |
|     value16 = colAggByRID.DataSize;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "OutputType: " << colAggByRID.OutputType << endl;
 | |
|     value8 = colAggByRID.OutputType;
 | |
|     obs << value8;
 | |
| 
 | |
|     cout << "BOP: " << colAggByRID.BOP << endl;
 | |
|     value8 = colAggByRID.BOP;
 | |
|     obs << value8;
 | |
| 
 | |
|     cout << "NOPS: " << colAggByRID.NOPS << endl;
 | |
|     value16 = colAggByRID.NOPS;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "NVALS: " << colAggByRID.NVALS << endl;
 | |
|     value16 = colAggByRID.NVALS;
 | |
|     obs << value16;
 | |
| 
 | |
|     //obs << TempData;
 | |
| 
 | |
|     cout << "Sending to Primitive Server" << endl;
 | |
| 
 | |
|     proc.write(obs);
 | |
| 
 | |
|     cout << "Sent... awaiting results" << endl;
 | |
| 
 | |
|     ibs = proc.read();
 | |
|     if (ibs.length() > 0)
 | |
|     {
 | |
|         ISMPacketHeader pktHeader;
 | |
|         ColAggResultHeader colAggResult;
 | |
| 
 | |
|         cout << "Received results" << endl << endl;
 | |
| 
 | |
|         ibs >> value32;
 | |
|         pktHeader.Reserve = value32;
 | |
| 
 | |
|         ibs >> value16;
 | |
|         pktHeader.Flow = value16;
 | |
| 
 | |
|         ibs >> value8;
 | |
|         pktHeader.Command = value8;
 | |
| 
 | |
|         ibs >> value16;
 | |
|         pktHeader.Size = value16;
 | |
| 
 | |
|         ibs >> value8;
 | |
|         pktHeader.Type = value8;
 | |
| 
 | |
|         ibs >> value64;
 | |
|         pktHeader.Source = value64;
 | |
| 
 | |
|         ibs >> value64;
 | |
|         pktHeader.Dest = value64;
 | |
| 
 | |
|         ibs >> value64;
 | |
|         pktHeader.FinalDest = value64;
 | |
| 
 | |
|         ibs >> value16;
 | |
|         colAggResult.Hdr.SessionID = value16;
 | |
| 
 | |
|         ibs >> value16;
 | |
|         colAggResult.Hdr.StatementID = value16;
 | |
| 
 | |
|         ibs >> value16;
 | |
|         colAggResult.Hdr.TransactionID = value16;
 | |
| 
 | |
|         ibs >> value16;
 | |
|         colAggResult.Hdr.VerID = value16;
 | |
| 
 | |
|         ibs >> value64;
 | |
|         colAggResult.LBID = value64;
 | |
| 
 | |
|         ibs >> value64;
 | |
|         colAggResult.MIN = value64;
 | |
| 
 | |
|         ibs >> value64;
 | |
|         colAggResult.MAX = value64;
 | |
| 
 | |
|         ibs >> value64;
 | |
|         colAggResult.SUM = value64;
 | |
| 
 | |
|         ibs >> value32;
 | |
|         colAggResult.SUMOverflow = value32;
 | |
| 
 | |
|         ibs >> value16;
 | |
|         colAggResult.NVALS = value16;
 | |
| 
 | |
|         ibs >> value16;
 | |
|         colAggResult.Pad1 = value16;
 | |
| 
 | |
|         cout << "pktHeader.Reserve: " << pktHeader.Reserve << endl;
 | |
|         cout << "pktHeader.Flow: " << pktHeader.Flow << endl;
 | |
|         cout << "pktHeader.Command: " << pktHeader.Command << endl;
 | |
|         cout << "pktHeader.Size: " << pktHeader.Size << endl;
 | |
|         cout << "pktHeader.Type: " << pktHeader.Type << endl;
 | |
|         cout << "pktHeader.Source: " << pktHeader.Source << endl;
 | |
|         cout << "pktHeader.Dest: " << pktHeader.Dest << endl;
 | |
|         cout << "pktHeader.FinalDest: " << pktHeader.FinalDest << endl;
 | |
|         cout << "colAggResult.Hdr.SessionID: " << colAggResult.Hdr.SessionID << endl;
 | |
|         cout << "colAggResult.Hdr.StatementID: " << colAggResult.Hdr.StatementID << endl;
 | |
|         cout << "colAggResult.Hdr.TransactionID: " << colAggResult.Hdr.TransactionID << endl;
 | |
|         cout << "colAggResult.Hdr.VerID: " << colAggResult.Hdr.VerID << endl;
 | |
|         cout << "colAggResult.LBID: " << colAggResult.LBID << endl;
 | |
|         cout << "colAggResult.MIN: " << colAggResult.MIN << endl;
 | |
|         cout << "colAggResult.MAX: " << colAggResult.MAX << endl;
 | |
|         cout << "colAggResult.SUM: " << colAggResult.SUM << endl;
 | |
|         cout << "colAggResult.SUMOverflow: " << colAggResult.SUMOverflow << endl;
 | |
|         cout << "colAggResult.NVALS: " << colAggResult.NVALS << endl;
 | |
|         cout << "colAggResult.Pad1: " << colAggResult.Pad1 << endl;
 | |
| 
 | |
|         cout << "Data" << endl;
 | |
|         cout << "----" << endl << endl;
 | |
|         cout << "Data Size: " << ibs.length() << endl;
 | |
|         for (int i = 0; i < colAggResult.NVALS && ibs.length(); i++)
 | |
|         {
 | |
|             if (colAggByRID.OutputType == 1 || colAggByRID.OutputType == 3 )
 | |
|             {
 | |
|                 ibs >> value16;
 | |
|                 cout << "RID: " << value16 << endl;
 | |
|             }
 | |
|             if (colAggByRID.OutputType == 2 || colAggByRID.OutputType == 3)
 | |
|             {
 | |
|                 cout << "Token: ";
 | |
|                 switch (colAggByRID.DataSize)
 | |
|                 {
 | |
|                     case 1:
 | |
|                         ibs >> value8;
 | |
|                         cout << value8 << endl;
 | |
|                         break;
 | |
| 
 | |
|                     case 2:
 | |
|                         ibs >> value16;
 | |
|                         cout << value16 << endl;
 | |
|                         break;
 | |
| 
 | |
|                     case 4:
 | |
|                         ibs >> value32;
 | |
|                         cout << value32 << endl;
 | |
|                         break;
 | |
| 
 | |
|                     case 8:
 | |
|                     default:
 | |
|                         ibs >> value64;
 | |
|                         cout << value64 << endl;
 | |
|                         break;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| void testDictTokenByIndexCompare()
 | |
| {
 | |
|     cout << "Sending DICT_TOKEN_BY_INDEX_COMPARE primitive" << endl;
 | |
| 
 | |
|     MessageQueueClient proc("PMS1");
 | |
|     ByteStream obs,ibs;
 | |
| 
 | |
|     ByteStream::octbyte value64;
 | |
|     ByteStream::quadbyte value32;
 | |
|     ByteStream::doublebyte value16;
 | |
|     ByteStream::byte value8;
 | |
| 
 | |
|     ISMPacketHeader packetHeader;
 | |
|     packetHeader.Reserve = 0;
 | |
|     packetHeader.Flow = 0;
 | |
|     packetHeader.Command = DICT_TOKEN_BY_INDEX_COMPARE;
 | |
|     packetHeader.Size = (sizeof(ISMPacketHeader) + sizeof(DictTokenByIndexRequestHeader));
 | |
|     packetHeader.Type = 2;
 | |
|     packetHeader.Source = 0;
 | |
|     packetHeader.Dest = 0;
 | |
|     packetHeader.FinalDest = 0;
 | |
| 
 | |
|     DictTokenByIndexRequestHeader  dictTokenByIndex;
 | |
|     dictTokenByIndex.Hdr.SessionID = 1;
 | |
|     dictTokenByIndex.Hdr.StatementID = 1;
 | |
|     dictTokenByIndex.Hdr.TransactionID = 0;
 | |
|     dictTokenByIndex.Hdr.VerID = 0;
 | |
|     dictTokenByIndex.LBID  = 0;
 | |
|     dictTokenByIndex.PBID  = 0;
 | |
|     dictTokenByIndex.NVALS = 0;
 | |
|     dictTokenByIndex.Pad1  = 0;
 | |
|     dictTokenByIndex.Pad2  = 0;
 | |
| 
 | |
|     cout << "ISMPacketHeader" << endl;
 | |
|     cout << "---------------" << endl << endl;
 | |
|     cout << "Reserve: " << packetHeader.Reserve << endl;
 | |
|     value32 = packetHeader.Reserve;
 | |
|     obs << value32;
 | |
| 
 | |
|     cout << "Flow: " << packetHeader.Flow << endl;
 | |
|     value16 = packetHeader.Flow;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Command: " << packetHeader.Command << endl;
 | |
|     value8 = packetHeader.Command;
 | |
|     obs << value8;
 | |
| 
 | |
|     cout << "Size: " << packetHeader.Size << endl;
 | |
|     value16 = packetHeader.Size;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Type: " << packetHeader.Type << endl;
 | |
|     value8 = packetHeader.Type;
 | |
|     obs << value8;
 | |
| 
 | |
|     cout << "Source: " << packetHeader.Source << endl;
 | |
|     value64 = packetHeader.Source;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "Dest: " << packetHeader.Dest << endl;
 | |
|     value64 = packetHeader.Dest;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "FinalDest: " << packetHeader.FinalDest << endl << endl;
 | |
|     value64 = packetHeader.FinalDest;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "DictTokenByIndexRequestHeader.PrimitiveHeader" << endl;
 | |
|     cout << "--------------------------------------" << endl << endl;
 | |
|     cout << "SessionID: " << dictTokenByIndex.Hdr.SessionID << endl;
 | |
|     value16 = dictTokenByIndex.Hdr.SessionID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "StatementID: " << dictTokenByIndex.Hdr.StatementID << endl;
 | |
|     value16 = dictTokenByIndex.Hdr.StatementID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "TransactionID: " << dictTokenByIndex.Hdr.TransactionID << endl;
 | |
|     value16 = dictTokenByIndex.Hdr.TransactionID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "VerID: " << dictTokenByIndex.Hdr.VerID << endl;
 | |
|     value16 = dictTokenByIndex.Hdr.VerID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "DictTokenByIndexRequestHeader" << endl;
 | |
|     cout << "-------------------------" << endl << endl;
 | |
| 
 | |
|     cout << "LBID: " << dictTokenByIndex.LBID << endl;
 | |
|     value64 = dictTokenByIndex.LBID;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "PBID: " << dictTokenByIndex.PBID << endl;
 | |
|     value64 = dictTokenByIndex.PBID;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "NVALS: " << dictTokenByIndex.NVALS << endl;
 | |
|     value16 = dictTokenByIndex.NVALS;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Pad1: " << dictTokenByIndex.Pad1 << endl;
 | |
|     value16 = dictTokenByIndex.Pad1;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Pad2: " << dictTokenByIndex.Pad2 << endl;
 | |
|     value32 = dictTokenByIndex.Pad2;
 | |
|     obs << value32;
 | |
| 
 | |
|     cout << "Sending to Primitive Server" << endl;
 | |
| 
 | |
|     proc.write(obs);
 | |
| 
 | |
|     cout << "Sent... awaiting results" << endl;
 | |
| 
 | |
|     ibs = proc.read();
 | |
|     cout << "Data" << endl;
 | |
|     cout << "----" << endl << endl;
 | |
|     if (ibs.length() > 0)
 | |
|     {
 | |
|         cout << "Data Size: " << ibs.length() << endl;
 | |
|         while (ibs.length())
 | |
|         {
 | |
|             ibs >> value16;
 | |
|             cout << value16 << endl;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| void testDictTokenByScanCompare()
 | |
| {
 | |
|     cout << "Sending DICT_TOKEN_BY_SCAN_COMPARE primitive" << endl;
 | |
| }
 | |
| 
 | |
| 
 | |
| void testDictSignature()
 | |
| {
 | |
|     cout << "DICT_SIGNATURE primitive" << endl;
 | |
| 
 | |
|     MessageQueueClient proc("PMS1");
 | |
|     ByteStream obs,ibs;
 | |
| 
 | |
|     ByteStream::octbyte value64;
 | |
|     ByteStream::quadbyte value32;
 | |
|     ByteStream::doublebyte value16;
 | |
|     ByteStream::byte value8;
 | |
| 
 | |
|     ISMPacketHeader packetHeader;
 | |
|     packetHeader.Reserve = 0;
 | |
|     packetHeader.Flow = 0;
 | |
|     packetHeader.Command = DICT_SIGNATURE;
 | |
|     packetHeader.Size = (sizeof(ISMPacketHeader) + sizeof(DictSignatureRequestHeader));
 | |
|     packetHeader.Type = 2;
 | |
|     packetHeader.Source = 0;
 | |
|     packetHeader.Dest = 0;
 | |
|     packetHeader.FinalDest = 0;
 | |
| 
 | |
|     DictSignatureRequestHeader  dictSignature;
 | |
|     dictSignature.Hdr.SessionID = 1;
 | |
|     dictSignature.Hdr.StatementID = 1;
 | |
|     dictSignature.Hdr.TransactionID = 0;
 | |
|     dictSignature.Hdr.VerID = 0;
 | |
|     dictSignature.LBID = 0;
 | |
|     dictSignature.PBID = 0;
 | |
|     dictSignature.NVALS = 0;
 | |
|     dictSignature.Pad1 = 0;
 | |
|     dictSignature.Pad2 = 0;
 | |
| 
 | |
|     cout << "ISMPacketHeader" << endl;
 | |
|     cout << "---------------" << endl << endl;
 | |
|     cout << "Reserve: " << packetHeader.Reserve << endl;
 | |
|     value32 = packetHeader.Reserve;
 | |
|     obs << value32;
 | |
| 
 | |
|     cout << "Flow: " << packetHeader.Flow << endl;
 | |
|     value16 = packetHeader.Flow;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Command: " << packetHeader.Command << endl;
 | |
|     value8 = packetHeader.Command;
 | |
|     obs << value8;
 | |
| 
 | |
|     cout << "Size: " << packetHeader.Size << endl;
 | |
|     value16 = packetHeader.Size;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Type: " << packetHeader.Type << endl;
 | |
|     value8 = packetHeader.Type;
 | |
|     obs << value8;
 | |
| 
 | |
|     cout << "Source: " << packetHeader.Source << endl;
 | |
|     value64 = packetHeader.Source;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "Dest: " << packetHeader.Dest << endl;
 | |
|     value64 = packetHeader.Dest;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "FinalDest: " << packetHeader.FinalDest << endl << endl;
 | |
|     value64 = packetHeader.FinalDest;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "DictSignatureRequestHeader.PrimitiveHeader" << endl;
 | |
|     cout << "--------------------------------------" << endl << endl;
 | |
|     cout << "SessionID: " << dictSignature.Hdr.SessionID << endl;
 | |
|     value16 = dictSignature.Hdr.SessionID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "StatementID: " << dictSignature.Hdr.StatementID << endl;
 | |
|     value16 = dictSignature.Hdr.StatementID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "TransactionID: " << dictSignature.Hdr.TransactionID << endl;
 | |
|     value16 = dictSignature.Hdr.TransactionID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "VerID: " << dictSignature.Hdr.VerID << endl;
 | |
|     value16 = dictSignature.Hdr.VerID;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "DictSignatureRequestHeader" << endl;
 | |
|     cout << "-------------------------" << endl << endl;
 | |
| 
 | |
|     cout << "LBID: " << dictSignature.LBID << endl;
 | |
|     value64 = dictSignature.LBID;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "PBID: " << dictSignature.PBID << endl;
 | |
|     value64 = dictSignature.LBID;
 | |
|     obs << value64;
 | |
| 
 | |
|     cout << "NVALS: " << dictSignature.NVALS << endl;
 | |
|     value16 = dictSignature.NVALS;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Pad1: " << dictSignature.Pad1 << endl;
 | |
|     value16 = dictSignature.Pad1;
 | |
|     obs << value16;
 | |
| 
 | |
|     cout << "Pad2: " << dictSignature.Pad2 << endl;
 | |
|     value32 = dictSignature.Pad2;
 | |
|     obs << value32;
 | |
| 
 | |
|     cout << "Sending to Primitive Server" << endl;
 | |
| 
 | |
|     proc.write(obs);
 | |
| 
 | |
|     cout << "Sent... awaiting results" << endl;
 | |
| 
 | |
|     ibs = proc.read();
 | |
| 
 | |
|     cout << "Data" << endl;
 | |
|     cout << "----" << endl << endl;
 | |
|     if (ibs.length() > 0)
 | |
|     {
 | |
|         cout << "Data Size: " << ibs.length() << endl;
 | |
|         while (ibs.length())
 | |
|         {
 | |
|             ibs >> value16;
 | |
|             cout << value16 << endl;
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| void testDictAggregate()
 | |
| {
 | |
|     cout << "DICT_AGGREGATE primitive" << endl;
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| void testIndexByCompare()
 | |
| {
 | |
|     cout << "INDEX_BY_COMPARE primitive" << endl;
 | |
| }
 | |
| 
 | |
| 
 | |
| void testIndexByScan()
 | |
| {
 | |
|     cout << "INDEX_BY_SCAN primitive" << endl;
 | |
| }
 | |
| 
 | |
| 
 | |
| int main(int argc, char* argv[])
 | |
| {
 | |
| 
 | |
|     po::options_description desc ("Allowed options");
 | |
|     desc.add_options ()
 | |
|         ("help", "produce help message")
 | |
|         ("all", "process all tests" )
 | |
|         ("loop", "loop processing all tests");
 | |
|     po::variables_map vm;
 | |
|     po::store (po::parse_command_line (argc, argv, desc), vm);
 | |
|     po::notify (vm);
 | |
| 
 | |
|     if (vm.count ("all"))
 | |
|     {
 | |
|         testColByScan();
 | |
|         //testColByRid();
 | |
|         //testColAggByScan();
 | |
|         //testColAggByRid();
 | |
|         //testDictSignature();
 | |
|         //testDictTokenByIndexCompare();
 | |
|     }
 | |
|     else if (vm.count ("loop"))
 | |
|     {
 | |
|         while(1)
 | |
|         {
 | |
|             testColByScan();
 | |
|             testColByRid();
 | |
|             testColAggByScan();
 | |
|             testColAggByRid();
 | |
|             testDictSignature();
 | |
|             testDictTokenByIndexCompare();
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
| }
 |