package Ġorg . part i ql . examples Ċ Ċ import Ġcom . amazon . ion . Ion Decimal Ċ import Ġcom . amazon . ion . Ion Struct Ċ import Ġcom . amazon . ion . system . Ion System Builder Ċ import Ġorg . part i ql . examples . util . Example Ċ import Ġorg . part i ql . lang . Compiler Pipeline Ċ import Ġorg . part i ql . lang . errors . ErrorCode Ċ import Ġorg . part i ql . lang . errors . Property Ċ import Ġorg . part i ql . lang . errors . PropertyValue Map Ċ import Ġorg . part i ql . lang . eval . Binding Case Ċ import Ġorg . part i ql . lang . eval . Binding Name Ċ import Ġorg . part i ql . lang . eval . Bindings Ċ import Ġorg . part i ql . lang . eval . Evaluation Exception Ċ import Ġorg . part i ql . lang . eval . Evaluation Session Ċ import Ġorg . part i ql . lang . eval . Expr Value Ċ import Ġorg . part i ql . lang . eval . Expr Value Factory Ċ import Ġorg . part i ql . lang . eval . Expr ValueType Ċ import Ġorg . part i ql . lang . eval . builtins . stored procedure . Stored Procedure Ċ import Ġorg . part i ql . lang . eval . builtins . stored procedure . Stored Procedure Signature Ċ import Ġorg . part i ql . lang . eval . stringValue Ċ import Ġjava . io . Print Stream Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . Round ingMode Ċ Ċ private Ġval Ġion Ġ= ĠIon System Builder . standard (). build () Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġcustom Ġstored Ġprocedure Ġthat Ġcalculates Ġthe Ġmoon Ġweight Ġfor Ġeach Ġcre wm ate Ġof Ġthe Ġgiven Ġcre w , Ġstoring Ġthe Ċ Ġ* Ġmoon Ġweight Ġin Ġthe Ġ[ Evaluation Session ] Ġglobal Ġbindings . ĠThis Ġprocedure Ġalso Ġreturns Ġthe Ġnumber Ġof Ġcre wm ates Ġwe Ċ Ġ* Ġcalculated Ġthe Ġmoon Ġweight Ġfor , Ġreturning Ġ- 1 Ġif Ġno Ġcre w Ġis Ġfound . Ċ Ġ* Ċ Ġ* ĠThis Ġexample Ġdemonstrates Ġhow Ġto Ġcreate Ġa Ġcustom Ġstored Ġprocedure , Ġcheck Ġargument Ġtypes , Ġand Ġmodify Ġthe Ċ Ġ* Ġ[ Evaluation Session ]. Ċ Ġ*/ Ċ class ĠCalculate Cre w Moon Weight ( private Ġval Ġvalue Factory : ĠExpr Value Factory ) Ġ: ĠStored Procedure Ġ{ ĊĠĠĠ Ġprivate Ġval ĠMO ON _ GR AV IT ATION AL _ CONSTANT Ġ= ĠBigDecimal ( 1 . 6 2 2 Ġ/ Ġ 9 . 8 1 ) ĊĊĠĠĠ Ġ// Ġ[ Stored Procedure Signature ] Ġtakes Ġtwo Ġarguments : ĊĠĠĠ Ġ// ĠĠĠ 1 . Ġthe Ġname Ġof Ġthe Ġstored Ġprocedure ĊĠĠĠ Ġ// ĠĠĠ 2 . Ġthe Ġar ity Ġof Ġthis Ġstored Ġprocedure . ĠChecks Ġto Ġar ity Ġare Ġtaken Ġcare Ġof Ġby Ġthe Ġevaluator . ĠHowever , Ġwe Ġmust ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġstill Ġcheck Ġthat Ġthe Ġpassed Ġarguments Ġare Ġof Ġthe Ġright Ġtype Ġin Ġour Ġimplementation Ġof Ġthe Ġprocedure . ĊĠĠĠ Ġoverride Ġval Ġsignature Ġ= ĠStored Procedure Signature ( name Ġ= Ġ" calculate _ cre w _ moon _ weight ", Ġar ity Ġ= Ġ 1 ) ĊĊĠĠĠ Ġ// Ġ` call ` Ġis Ġwhere Ġyou Ġdefine Ġthe Ġlogic Ġof Ġthe Ġstored Ġprocedure Ġgiven Ġan Ġ[ Evaluation Session ] Ġand Ġa Ġlist Ġof ĊĠĠĠ Ġ// Ġarguments ĊĠĠĠ Ġoverride Ġfun Ġcall ( session : ĠEvaluation Session , Ġargs : ĠList < Expr Value >): ĠExpr Value Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġfirst Ġcheck Ġthat Ġthe Ġfirst Ġargument Ġis Ġa Ġstring ĊĠĠĠĠĠĠĠ Ġval Ġcre w Name Ġ= Ġargs . first () ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġthe Ġfuture Ġthe Ġevaluator Ġwill Ġalso Ġverify Ġfunction Ġargument Ġtypes , Ġbut Ġfor Ġnow Ġwe Ġmust Ġverify Ġtheir Ġtype ĊĠĠĠĠĠĠĠ Ġ// Ġmanually ĊĠĠĠĠĠĠĠ Ġif Ġ( cre w Name . type Ġ!= ĠExpr ValueType . STRING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Context Ġ= ĠProperty Value Map (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Property . EXPECTED _ ARGUMENT _ TYPES ] Ġ= Ġ" STRING " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Property . ACT UAL _ ARGUMENT _ TYPES ] Ġ= Ġcre w Name . type . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Property . FUNCTION _ NAME ] Ġ= Ġsignature . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEvaluation Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" First Ġargument Ġto Ġ${ signature . name } Ġwas Ġnot Ġa Ġstring ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠErrorCode . EVAL U ATOR _ IN CORRECT _ TYPE _ OF _ ARGUMENT S _ TO _ PROC EDURE _ CALL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠNext Ġwe Ġcheck Ġif Ġthe Ġgiven Ġ` cre w Name ` Ġis Ġin Ġthe Ġ[ Evaluation Session ]' s Ġglobal Ġbindings . ĠIf Ġnot , Ġwe Ġreturn Ġ 0 . ĊĠĠĠĠĠĠĠ Ġval Ġsession Globals Ġ= Ġsession . globals ĊĠĠĠĠĠĠĠ Ġval Ġcre w Bindings Ġ= Ġsession Globals [ Binding Name ( cre w Name . stringValue (), ĠBinding Case . INS ENS ITIVE )] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġvalue Factory . new Int (- 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNow Ġthat Ġwe 've Ġconfirmed Ġthe Ġgiven Ġ` cre w Name ` Ġis Ġin Ġthe Ġsession 's Ġglobal Ġbindings , Ġwe Ġcalculate Ġand Ġstore ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġmoon Ġweight Ġfor Ġeach Ġcre wm ate Ġin Ġthe Ġcre w . ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġaddition , Ġwe Ġkeep Ġa Ġrunning Ġa Ġt ally Ġof Ġhow Ġmany Ġcre wm ates Ġwe Ġdo Ġthis Ġfor . ĊĠĠĠĠĠĠĠ Ġvar Ġnum Calculated Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( cre wm ate Binding Ġin Ġcre w Bindings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcre wm ate Ġ= Ġcre wm ate Binding . ion Value Ġas ĠIon Struct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmass Ġ= Ġcre wm ate [" mass "] Ġas ĠIon Decimal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmoon Weight Ġ= Ġ( mass . decimal Value () Ġ* ĠMO ON _ GR AV IT ATION AL _ CONSTANT ). set Scale ( 1 , ĠRound ingMode . HALF _ UP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcre wm ate . add (" moon Weight ", Ġion . new Decimal ( moon Weight )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnum Calculated ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue Factory . new Int ( num Calculated ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠD emon str ates Ġthe Ġuse Ġof Ġcustom Ġstored Ġprocedure Ġ[ Calculate Cre w Moon Weight ] Ġin ĠPart i QL Ġqueries . Ċ Ġ*/ Ċ class ĠCustom Pro cedures Example ( out : ĠPrint Stream ) Ġ: ĠExample ( out ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTo Ġmake Ġcustom Ġstored Ġprocedures Ġavailable Ġto Ġthe ĠPart i QL Ġquery Ġbeing Ġexecuted , Ġthey Ġmust Ġbe Ġpassed Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Compiler Pipeline . Builder . add Procedure ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġpipeline Ġ= ĠCompiler Pipeline . build ( ion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Procedure ( Calculate Cre w Moon Weight ( value Factory )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠHere , Ġwe Ġinitialize Ġthe Ġcre ws Ġto Ġbe Ġstored Ġin Ġour Ġglobal Ġsession Ġbindings ĊĠĠĠĠĠĠĠ Ġval Ġinitial Cre ws Ġ= ĠBind ings . of Map ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cre w 1 " Ġto Ġpipeline . value Factory . new From Ion Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . single Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" [ Ġ{ Ġname : Ġ" Ne il ", ĠĠĠ Ġmass : Ġ 8 0 . 5 Ġ}, Ġ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġname : Ġ" Bu zz ", ĠĠĠ Ġmass : Ġ 7 2 . 3 Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġname : Ġ" Michael ", Ġmass : Ġ 8 9 . 9 Ġ} Ġ] """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cre w 2 " Ġto Ġpipeline . value Factory . new From Ion Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . single Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" [ Ġ{ Ġname : Ġ" James ", Ġmass : Ġ 7 7 . 1 Ġ}, Ġ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġname : Ġ" Spo ck ", Ġmass : Ġ 8 1 . 6 Ġ} Ġ] """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= ĠEvaluation Session . build Ġ{ Ġglobals ( initial Cre ws ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcre w 1 Binding Name Ġ= ĠBinding Name (" cre w 1 ", ĠBinding Case . INS ENS ITIVE ) ĊĠĠĠĠĠĠĠ Ġval Ġcre w 2 Binding Name Ġ= ĠBinding Name (" cre w 2 ", ĠBinding Case . INS ENS ITIVE ) ĊĊĠĠĠĠĠĠĠ Ġout . println (" Initial Ġglobal Ġsession Ġbindings :") ĊĠĠĠĠĠĠĠ Ġprint (" Cre w Ġ 1 :", Ġ"${ session . globals [ cre w 1 Binding Name ]} ") ĊĠĠĠĠĠĠĠ Ġprint (" Cre w Ġ 2 :", Ġ"${ session . globals [ cre w 2 Binding Name ]} ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġcall Ġour Ġcustom Ġstored Ġprocedure Ġusing ĠPart i QL 's Ġ` EXEC ` Ġclause . ĠHere Ġwe Ġcall Ġour Ġstored Ġprocedure ĊĠĠĠĠĠĠĠ Ġ// Ġ' calculate _ cre w _ moon _ weight ' Ġwith Ġthe Ġarg Ġ' cre w 1 ', Ġwhich Ġoutputs Ġthe Ġnumber Ġof Ġcre wm ates Ġwe 've Ġcalculated ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġmoon Ġweight Ġfor ĊĠĠĠĠĠĠĠ Ġval Ġprocedure Call Ġ= Ġ" EXEC Ġcalculate _ cre w _ moon _ weight Ġ' cre w 1 '" ĊĠĠĠĠĠĠĠ Ġval Ġprocedure Call Output Ġ= Ġpipeline . compile ( procedure Call ). eval ( session ) ĊĠĠĠĠĠĠĠ Ġprint (" Number Ġof Ġcalculated Ġmoon Ġweights :", Ġ"$ procedure Call Output ") ĊĊĠĠĠĠĠĠĠ Ġout . println (" Updated Ġglobal Ġsession Ġbindings :") ĊĠĠĠĠĠĠĠ Ġprint (" Cre w Ġ 1 :", Ġ"${ session . globals [ cre w 1 Binding Name ]} ") ĊĠĠĠĠĠĠĠ Ġprint (" Cre w Ġ 2 :", Ġ"${ session . globals [ cre w 2 Binding Name ]} ") ĊĠĠĠ Ġ} Ċ } Ċ