package Ġmm . inventory . infra . store . j db i . item classes Ċ Ċ import Ġmm . inventory . app . product planner . item class . Item Class AppId Ċ import Ġorg . j db i . v 3 . sq lo bject . statement . Sql Query Ċ import Ġorg . j db i . v 3 . sq lo bject . statement . Sql Update Ċ Ċ /** Ċ Ġ* ĠDao Ġto Ġaccess ĠItem _ Classes Ġtable Ġand Ġrel atives . Ċ Ġ* Ġ---------------------------------------------------------------- --------------------------------------------------------------------------- Ċ Ġ* ĠNote : ĠThis ĠDao Ġclass Ġis Ġjust Ġa Ġdecl arative Ġway Ġof Ġaccessing Ġdata Ġin ĠRel ational ĠDatabase Ġusing ĠJ DB I . ĠIt Ġshouldn 't Ġbe Ġmixed Ġwith Ġrepositories Ċ Ġ* Ġwhich Ġare Ġdomain Ġrelated Ġartifacts , Ġtherefore Ġdifferent Ġnaming Ġis Ġused . Ċ Ġ* Ġ---------------------------------------------------------------- --------------------------------------------------------------------------- Ċ Ġ*/ Ċ internal Ġinterface ĠItem Class Dao Ġ{ ĊĊĠĠĠ Ġ@ Sql Query (""" ĊĠĠĠĠĠĠĠ ĠSELECT Ġname , Ġversion , Ġdescription , Ġunit ĠĊĠĠĠĠĠĠĠ ĠFROM ĠItem _ classes ĠĊĠĠĠĠĠĠĠ ĠWHERE Ġ( name , Ġversion ) ĠIN Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġname , ĠMAX ( version ) ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĠItem _ classes ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġcomplete = TRUE ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠGROUP ĠBY Ġname ) ĠĊĠĠĠĠĠĠĠ ĠORDER ĠBY Ġname """) ĊĠĠĠ Ġfun Ġselect Item Classes (): ĠList < Item Class Rec > ĊĊĠĠĠ Ġ@ Sql Query (" SELECT ĠMAX ( version ) ĠFROM ĠItem _ classes ĠWHERE Ġname =? ĠAND Ġcomplete = TRUE ") ĊĠĠĠ Ġfun Ġselect New est Item Class Version ( item ClassName : ĠString ): ĠLong ? ĊĊĠĠĠ Ġ@ Sql Query (" SELECT ĠMIN ( version ) ĠFROM ĠItem _ classes ĠWHERE Ġname =? ĠAND Ġcomplete = FALSE ") ĊĠĠĠ Ġfun Ġselect Draft Version ( item ClassName : ĠString ): ĠLong ? ĊĊĠĠĠ Ġ@ Sql Query (""" ĊĠĠĠĠĠĠĠ ĠSELECT Ġname , Ġversion , Ġdescription , Ġunit ĠĊĠĠĠĠĠĠĠ ĠFROM ĠItem _ Classes ĠĊĠĠĠĠĠĠĠ ĠWHERE Ġname =? ĠAND Ġversion =? ĠĊĠĠĠĠĠĠĠ ĠORDER ĠBY Ġversion ĠDESC """) ĊĠĠĠ Ġfun Ġselect Item Class ByName ( item ClassName : ĠString , Ġitem Class Version : ĠLong ): ĠItem Class Rec ? ĊĊĠĠĠ Ġ@ Sql Query (""" ĊĠĠĠĠĠĠĠ ĠSELECT Ġa . attribute _ type , Ġat . name , Ġat . scalar , Ġu . code Ġas Ġunit _ code , Ġu . name Ġas Ġunit _ name ĠĊĠĠĠĠĠĠĠ ĠFROM ĠAttributes Ġa ĠĊĠĠĠĠĠĠĠ ĠJOIN ĠAttribute _ Types Ġat ĠON Ġa . attribute _ type Ġ= Ġat . name ĠĊĠĠĠĠĠĠĠ ĠLEFT ĠOUT ER ĠJOIN ĠUnits Ġu ĠON Ġat . unit Ġ= Ġu . code ĠĊĠĠĠĠĠĠĠ ĠWHERE Ġitem _ class _ name =? ĠAND Ġitem _ class _ version =? """) ĊĠĠĠ Ġfun Ġselect Attributes With Types For Item Class ( item ClassName : ĠString , Ġitem Class Version : ĠLong ): ĠList < Attribute WithType Rec > ĊĊĠĠĠ Ġ@ Sql Query (""" ĊĠĠĠĠĠĠĠ ĠSELECT Ġattribute _ type _ name , Ġcode , Ġvalue ĠĊĠĠĠĠĠĠĠ ĠFROM ĠAttribute _ Type _ Values ĠĊĠĠĠĠĠĠĠ ĠWHERE Ġattribute _ type _ name ĠIN Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġattribute _ type ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĠAttributes ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġitem _ class _ name =? ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġitem _ class _ version = ?) """) ĊĠĠĠ Ġfun Ġselect Attribute Values For Item Class ( item ClassName : ĠString , Ġitem Class Version : ĠLong ): ĠList < AttributeType Value Rec > ĊĊĠĠĠ Ġ@ Sql Query (" SELECT Ġlast _ version ĠFROM ĠItem _ classes _ version _ counters ĠWHERE Ġname =? ĠFOR ĠUPDATE ") ĊĠĠĠ Ġfun Ġselect Counter And Lock ( item ClassName : ĠString ): ĠLong ? ĊĊĠĠĠ Ġ@ Sql Update (" INSERT ĠINTO ĠItem _ classes _ version _ counters ĠVALUES Ġ( ?, Ġ 1 )") ĊĠĠĠ Ġfun Ġinsert Counter ( item ClassName : ĠString ): ĠInt ĊĊĠĠĠ Ġ@ Sql Update (" UPDATE ĠItem _ classes _ version _ counters ĠSET Ġlast _ version =: last Version ĠWHERE Ġname =: item ClassName ") ĊĠĠĠ Ġfun Ġupdate Counter ( item ClassName : ĠString , Ġlast Version : ĠLong ): ĠInt ĊĊĠĠĠ Ġ@ Sql Update (""" ĊĠĠĠĠĠĠĠ ĠUPDATE ĠItem _ classes _ version _ counters ĠĊĠĠĠĠĠĠĠ ĠSET Ġlast _ version =( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ĠMAX ( version ) ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĠItem _ classes ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġname =: item ClassName ) ĠĊĠĠĠĠĠĠĠ ĠWHERE Ġname =: item ClassName """) ĊĠĠĠ Ġfun Ġrevert Counter ( item ClassName : ĠString ): ĠInt ĊĊĠĠĠ Ġ@ Sql Update (""" ĊĠĠĠĠĠĠĠ ĠINSERT ĠINTO ĠItem _ classes ( name , Ġversion , Ġcomplete , Ġdescription , Ġunit ) ĠĊĠĠĠĠĠĠĠ ĠVALUES Ġ(: item Class . name , Ġ: item Class . version , ĠFALSE , Ġ: item Class . description , Ġ: item Class . unit ) """) ĊĠĠĠ Ġfun Ġinsert Item Class ( item Class : ĠItem Class Rec ): ĠInt ĊĊĠĠĠ Ġ@ Sql Update (""" ĊĠĠĠĠĠĠĠ ĠINSERT ĠINTO ĠAttributes ( item _ class _ name , Ġitem _ class _ version , Ġattribute _ type ) ĠĊĠĠĠĠĠĠĠ ĠVALUES Ġ(: attribute . item ClassName , Ġ: attribute . item Class Version , Ġ: attribute . attribute Type ) """) ĊĠĠĠ Ġfun Ġinsert Attribute ( attribute : ĠAttribute Rec ): ĠInt ĊĊĠĠĠ Ġ@ Sql Update (""" ĊĠĠĠĠĠĠĠ ĠDELETE ĠFROM ĠAttributes ĠĊĠĠĠĠĠĠĠ ĠWHERE Ġitem _ class _ name =: attribute . item ClassName ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġitem _ class _ version =: attribute . item Class Version ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġattribute _ type =: attribute . attribute Type """) ĊĠĠĠ Ġfun Ġdelete Attribute ( attribute : ĠAttribute Rec ): ĠInt ĊĊĠĠĠ Ġ@ Sql Update (""" ĊĠĠĠĠĠĠĠ ĠUPDATE ĠItem _ classes ĠĊĠĠĠĠĠĠĠ ĠSET Ġcomplete = TRUE ĠĊĠĠĠĠĠĠĠ ĠWHERE Ġname =: id . id ĠAND Ġversion =: id . version ĠAND Ġcomplete = FALSE """) ĊĠĠĠ Ġfun Ġcomplete Draft Item Class ( id : Item Class AppId ): ĠInt ĊĊĠĠĠ Ġ@ Sql Update (" DELETE ĠFROM ĠItem _ classes ĠWHERE Ġname =: id . id ĠAND Ġversion =: id . version ĠAND Ġcomplete = FALSE ") ĊĠĠĠ Ġfun Ġdelete Draft Item Class ( id : Item Class AppId ): ĠInt ĊĊĠĠĠ Ġ@ Sql Update (""" ĊĠĠĠĠĠĠĠ ĠUPDATE ĠItem _ classes ĠĊĠĠĠĠĠĠĠ ĠSET Ġdescription Ġ= Ġ: description ĠĊĠĠĠĠĠĠĠ ĠWHERE Ġname =: id . id ĠAND Ġversion =: id . version ĠAND Ġcomplete = FALSE """) ĊĠĠĠ Ġfun Ġupdate Description ( id : Item Class AppId , Ġdescription : ĠString ): ĠInt ĊĊĠĠĠ Ġ@ Sql Update (""" ĊĠĠĠĠĠĠĠ ĠUPDATE ĠItem _ classes ĠĊĠĠĠĠĠĠĠ ĠSET Ġunit =: unit ĠĊĠĠĠĠĠĠĠ ĠWHERE Ġname =: id . id ĠAND Ġversion =: id . version ĠAND Ġcomplete = FALSE """) ĊĠĠĠ Ġfun Ġupdate Unit ( id : Item Class AppId , Ġunit : ĠString ): ĠInt Ċ } Ċ Ċ data Ġclass ĠItem Class Rec ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġversion : ĠLong , ĊĠĠĠ Ġval Ġdescription : ĠString , ĊĠĠĠ Ġval Ġunit : ĠString Ċ ) Ċ Ċ data Ġclass ĠAttribute WithType Rec ( ĊĠĠĠ Ġval Ġattribute Type : ĠString , ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġscalar : ĠBoolean , ĊĠĠĠ Ġval Ġunit Code : ĠString ?, ĊĠĠĠ Ġval Ġunit Name : ĠString ? Ċ ) Ċ Ċ data Ġclass ĠAttribute Type Value Rec ( ĊĠĠĠ Ġval Ġattribute TypeName : ĠString , ĊĠĠĠ Ġval Ġcode : ĠString , ĊĠĠĠ Ġval Ġvalue : ĠString Ċ ) Ċ Ċ data Ġclass ĠAttribute Rec ( ĊĠĠĠ Ġval Ġitem ClassName : ĠString , ĊĠĠĠ Ġval Ġitem Class Version : ĠLong , ĊĠĠĠ Ġval Ġattribute Type : ĠString Ċ ) Ċ