package Ġcom . w car mon . codegen . model Ċ Ċ import Ġcom . fasterxml . jackson . annotation . Json Creator Ċ import Ġcom . fasterxml . jackson . annotation . JsonValue Ċ Ċ /** Ċ Ġ* ĠOrdered Ġfield / column Ġnames Ġfor Ġfast Ġretrieval Ċ Ġ* Ċ Ġ* ĠSee Ġhttps :// en . wikipedia . org / wiki / Database _ index Ċ Ġ* ĠSee Ġhttps :// m ariadb . com / kb / en / getting - started - with - indexes / Ċ Ġ* ĠSee Ġhttps :// www . postgresql . org / docs / current / indexes - intro . html Ċ Ġ* ĠSee Ġhttps :// www . sqlite . org / lang _ create index . html Ċ Ġ*/ Ċ data Ġclass ĠIndex ( ĊĠ Ġ@ JsonValue ĊĠ Ġval Ġfield Names : ĠList < Name >, Ċ ) Ġ{ ĊĠ Ġ// TODO : Ġimplement Ġcomp arable ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġbuild ( var arg Ġnames : ĠString ): ĠIndex Ġ= ĊĠĠĠĠĠ ĠIndex ( names . map Ġ{ ĠName ( it ) Ġ}. toList ()) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Json Creator ĊĠĠĠ Ġfun Ġbuild ( fields : ĠCollection < String >): ĠIndex Ġ= ĊĠĠĠĠĠ ĠIndex ( fields . map Ġ{ ĊĠĠĠĠĠĠĠ ĠName ( it ) ĊĠĠĠĠĠ Ġ}. toList ()) ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġrequire ( field Names . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġ" At Ġleast Ġone Ġfield Ġname Ġis Ġrequired Ġon Ġan Ġindex " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrequire ( field Names . distinct (). size Ġ== Ġfield Names . size ) Ġ{ ĊĠĠĠĠĠ Ġ" Field Ġnames Ġmust Ġbe Ġunique : Ġ$ field Names " ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġval Ġfirst : ĠName Ġ= Ġfield Names . first () ĊĠ Ġval Ġsize : ĠInt Ġ= Ġfield Names . size Ċ Ċ } Ċ