bin/SqlciErrors.txt - new error message sqlcomp/CmpCatSqlErrorCodes.h - new error message sqlcomp/CmpSeabaseDDLmd.h - new literal describing length of generated HBase name sqlcomp/CmpSeabaseDDLcommon.cpp - new check for maxmum HBase name length
fix 1: privilege checks are not working correctly for UDR's
The method RelRoot::checkPrivileges is called to verify privileges for all object types. However, some UDR objects checks were skipped because they were not added to the UDR Stoi list.
optimizer/BindItemExpr.cpp - add function to Stoi list optimizer/BindRelExpr.cpp - add procedures to Stoi List optimzier/RelMisc.h - signature changes for privilege related work optimizer/BindRelExpr.cpp - rewrote checkPrivileges optimizer/NARoutine.h/NARoutineDB.cpp - added method moveRoutineToDeleteList
fix 2: QI is not working when UDR's are dropped
Code to drop items from NARoutineDB cache was missing. Code to set security keys for the user in the plan was missing Code to set objectUIDs in the plan was missing When security keys were added, they were incorrect
sqlcomp/CmpMain.h (.cpp) - added calls to compare invalidation keys with objects stored in NARoutineDB cache; if found, then remove item from cache by calling helper methods in NARoutineDB class. optimizer/NARoutineDB.h (NARoutine.cpp) - added helper method to remove entries from the cache free_entries_with_QI_key - based off of similar method for table cache ComSecurityKey.h (.cpp) - new method to check invalidation keys shared by tables/routines qiCheckForInvalidObject optimizer/NATable.cpp - rewrote table invalidation code so it could be shared with routines.
generator/GenUdr.cpp - add the routine's object UID to the query plan sqlcomp/CmpSeabaseDDLroutine.cpp - code to send invalidations keys during drop routine
common/ComSmallDefs.h - new QI actions for USAGE and REFERENCES common/ComDistribution.cpp - add EXECUTE as a privilege for QI, also added USAGE and REFERENCES sqlcomp/PrivMgrPrivileges.cpp - not generating correct security keys
fix 3: Routines were not being removed from NARoutineDB cache
Added new fields to the various routine structures for objectOwnerID, schemaOwnerID, and privInfo. Set up the correct routineID in various routine structures At drop time, made sure routine was removed from NARoutineDB cache
comexe/ComTdb.h - added new fields to routine descriptor and TDB generator/Generator.cpp - new fields for routines optimizer/NARoutine.h (.cpp) - new fields for routines removeNARoutine - based off similar method for table cache optimizer/NARoutine.cpp - added new field to store privilege information in NARoutine, which also gets security keys needed for query invalidation sqlcat/desc.h - new fields for routines sqlcomp/CmpSeabaseDDLtable.cpp - set up new values in NARoutine structure
sqlcomp/CmpSeabaseDDLroutine.cpp - code to remove entries from cache at drop time
C++ run-time interface for TMUDFs blueprint cmp-tmudf-compile-time-interface
- Support for C++ run-time interface: - A new language, C++ is added to langman, the existing LanguageManagerC handles both C and C++ - Two new parameter styles got added, C++ and Java object-oriented parameter styles. Routines written in C++ use the new object-oriented C++ parameter style. The compiler interface is only supported for that style (and in the future for the Java object-oriented style). - Also added one more compile time interface, the "completeDescription()" call in the generator. Added logic to extract the UDRPlanInfo of the optimal plan. - Changes to UDRInvocationInfo and UDRPlanInfo classes: - UDRInvocationInfo and UDRPlanInfo objects can now be serialized and they are added to generated plans, as part of the UDR TDB. - Split TableInfo into TupleInfo and TableInfo classes. TupleInfo is now the common base class for describing both parameters and input/output tables. - TypeInfo now has offsets for data, null indicator and varchar indicator. - New get<type> and set<type> methods on class TupleInfo, to be used at compile time for parameters and at runtime for parameters, input and output tables. - Added a "call phase" member, to be able to throw exceptions when certain methods are called at the wrong time (e.g. trying to modify compile time members at runtime). - Routine class in langman now has a new subclass, LmRoutineCppObj and a new method, invokeRoutineMethod, that is used to invoke the object-oriented methods, requiring UDRInvocationInfo and UDRPlanInfo as parameters. - Fixed some executor issues with error handling for UDFs, this is still not very well supported - Emitting the EOD row in the UDF is no longer required, and no longer supported or even possible. - UDRPlanInfo is now part of the physical properties, so that we can extract it from the optimal plan. - Disabling TMUDF as the inner of a nested join - for now. We might support this "routine join" at a later time. - regress/udr/TEST001: - SESSIONIZE_STATIC remains in C, but other TMUDFs are now rewritten in C++ (the runtime part that was not yet in C++) - SESSIONIZE_DYNAMIC is now the same as the example on the wiki - regress/udr/TEST002: Added some tests for event log reader UDF, but can't add the part that copies a sample log file, since in Jenkins, we don't have $MY_SQROOT set. Tried the test on my workstation, though. Steve tells me $MY_SQROOT should be available, so in a future checkin I'll enable this code again. - For patch set 2: Removed fix for LP bug 1420539 and addressed other review comments.