// ĠCopyright Ġ 2 0 2 0 ĠThe ĠCross - Media ĠMeasurement ĠAuthors Ċ // Ċ // ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ // Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ // ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ // Ċ // ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ // Ċ // ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ // Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ // ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ // ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ // Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ċ package Ġorg . wf an et . measurement . king dom . deploy . g cloud . spanner . readers Ċ Ċ import Ġcom . google . cloud . spanner . Struct Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġorg . wf an et . measurement . common . identity . Internal Id Ċ import Ġorg . wf an et . measurement . g cloud . spanner . Async Database Client Ċ import Ġorg . wf an et . measurement . g cloud . spanner . append Clause Ċ import Ġorg . wf an et . measurement . internal . king dom . Report Ċ Ċ /** ĠReads Ġ[ Report ] Ġprotos Ġfrom ĠSp anner Ġvia Ġthe ĠReport Re quis itions Ġtable . Ġ*/ Ċ class ĠReport Re quisition Reader Ġ: ĠSp anner Reader < Report Reader . Result >() Ġ{ ĊĠ Ġoverride Ġval Ġbase Sql : ĠString Ġ= ĊĠĠĠ Ġ""" ĊĠĠĠ ĠSELECT Ġ${ Report Reader . SELECT _ COLUMNS _ SQL } ĊĠĠĠ ĠFROM ĠReport Re quis itions ĊĠĠĠ ĠJOIN ĠAd vert is ers ĠUSING Ġ( Ad vert iser Id ) ĊĠĠĠ ĠJOIN ĠReport Configs ĠUSING Ġ( Ad vert iser Id , ĠReport Config Id ) ĊĠĠĠ ĠJOIN ĠReport Config Schedules ĠUSING Ġ( Ad vert iser Id , ĠReport Config Id , ĠSchedule Id ) ĊĠĠĠ ĠJOIN ĠReports ĠUSING Ġ( Ad vert iser Id , ĠReport Config Id , ĠSchedule Id , ĠReport Id ) ĊĠĠĠ Ġ""" . trim Indent () ĊĊĠ Ġoverride Ġval Ġexternal Id Column : ĠString Ġ= Ġ" Reports . External Report Id " ĊĊĠ Ġoverride Ġsuspend Ġfun Ġtranslate ( struct : ĠStruct ): ĠReport Reader . Result Ġ{ ĊĠĠĠ Ġreturn ĠReport Reader (). translate ( struct ) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġfun Ġread Report sWith Associated Re quisition ( ĊĠĠĠĠĠ Ġread Context : ĠAsync Database Client . Read Context , ĊĠĠĠĠĠ Ġdata Provider Id : ĠInternal Id , ĊĠĠĠĠĠ Ġcampaign Id : ĠInternal Id , ĊĠĠĠĠĠ Ġre quisition Id : ĠInternal Id ĊĠĠĠ Ġ): ĠFlow < Report Reader . Result > Ġ{ ĊĠĠĠĠĠ Ġval Ġwhere Clause Ġ= ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ ĠWHERE ĠReport Re quis itions . DataProvider Id Ġ= Ġ@ data _ provider _ id ĊĠĠĠĠĠĠĠĠĠ ĠAND ĠReport Re quis itions . Campaign Id Ġ= Ġ@ campaign _ id ĊĠĠĠĠĠĠĠĠĠ ĠAND ĠReport Re quis itions . Re quisition Id Ġ= Ġ@ requis ition _ id ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠ Ġreturn ĠReport Re quisition Reader () ĊĠĠĠĠĠĠĠ Ġ. with Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġappend Clause ( where Clause ) ĊĠĠĠĠĠĠĠĠĠ Ġbind (" data _ provider _ id "). to ( dataProvider Id . value ) ĊĠĠĠĠĠĠĠĠĠ Ġbind (" campaign _ id "). to ( campaign Id . value ) ĊĠĠĠĠĠĠĠĠĠ Ġbind (" requis ition _ id "). to ( requis ition Id . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. execute ( read Context ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ