Movatterモバイル変換
[0]ホーム
modulePostgreSQL.Binary.Encoder(run,Encoder,int2_int16,int2_word16,int4_int32,int4_word32,int8_int64,int8_word64,float4,float8,composite,bool,numeric,uuid,json_ast,json_bytes,jsonb_ast,jsonb_bytes,char,text_strict,text_lazy,bytea_strict,bytea_lazy,date,time_int,time_float,timetz_int,timetz_float,timestamp_int,timestamp_float,timestamptz_int,timestamptz_float,interval_int,interval_float,hstore,hstoreRep,array,ArrayEncoder,arrayValue,arrayNullableValue,arrayDimension,arrayRep,enum,)whereimportPostgreSQL.Binary.Preludehiding(take,bool,maybe)importData.ByteString.Builder(Builder)importqualifiedData.ByteString.BuilderasBuilderimportqualifiedData.ByteStringasByteStringimportqualifiedData.ByteString.LazyasLazyByteStringimportqualifiedData.TextasTextimportqualifiedData.Text.EncodingasTextimportqualifiedData.Text.LazyasLazyTextimportqualifiedData.Text.Lazy.EncodingasLazyTextimportqualifiedData.VectorasVectorimportqualifiedData.ScientificasScientificimportqualifiedData.AesonasAesonimportqualifiedData.UUIDasUUIDimportqualifiedPostgreSQL.Binary.DataasDataimportqualifiedPostgreSQL.Binary.IntegralasIntegralimportqualifiedPostgreSQL.Binary.NumericasNumericimportqualifiedPostgreSQL.Binary.TimeasTimeimportqualifiedPostgreSQL.Binary.IntervalasIntervalimportqualifiedPostgreSQL.Binary.BuilderPrimasBuilderPrimimportqualifiedControl.FoldlasFoldltypeEncodera=a->Builderrun::Encodera->a->ByteStringrunencoder=LazyByteString.toStrict.Builder.toLazyByteString.encodertuple2::Encodera->Encoderb->Encoder(a,b)tuple2e1e2=\(v1,v2)->e1v1<>e2v2tuple3::Encodera->Encoderb->Encoderc->Encoder(a,b,c)tuple3e1e2e3=\(v1,v2,v3)->e1v1<>e2v2<>e3v3tuple4::Encodera->Encoderb->Encoderc->Encoderd->Encoder(a,b,c,d)tuple4e1e2e3e4=\(v1,v2,v3,v4)->e1v1<>e2v2<>e3v3<>e4v4premap::(a->b)->Encoderb->Encoderapremapfe=e.fint2_int16::EncoderInt16int2_int16=Builder.int16BEint2_word16::EncoderWord16int2_word16=Builder.word16BEint4_int32::EncoderInt32int4_int32=Builder.int32BEint4_word32::EncoderWord32int4_word32=Builder.word32BEint4_int::EncoderIntint4_int=int4_int32.fromIntegralint8_int64::EncoderInt64int8_int64=Builder.int64BEint8_word64::EncoderWord64int8_word64=Builder.word64BEfloat4::EncoderFloatfloat4=int4_int32.unsafeCoercefloat8::EncoderDoublefloat8=int8_int64.unsafeCoercenull4::ByteStringBuildernull4=Builder.string7"\255\255\255\255"composite::EncoderData.Compositecompositevector=int4_int(Vector.lengthvector)<>foldMapcomponentvectorwherecomponent(oid,theContent)=int4_word32oid<>contenttheContentcontent::EncoderData.Contentcontent=\caseNothing->null4Justcontent->int4_int(ByteString.lengthcontent)<>Builder.byteStringcontentmaybe::Encodera->Encoder(Maybea)maybeencoder=\caseNothing->null4Justvalue->runencodervalue&\bytes->int4_int(ByteString.lengthbytes)<>Builder.byteStringbytesbool::EncoderBoolbool=\caseTrue->Builder.word81False->Builder.word80numeric::EncoderScientificnumericx=int2_int16(fromIntegralcomponentsAmount)<>int2_int16(fromIntegralpointIndex)<>int2_word16signCode<>int2_int16(fromIntegraltrimmedExponent)<>foldMapint2_int16componentswherecomponentsAmount=lengthcomponentscoefficient=Scientific.coefficientxexponent=Scientific.base10Exponentxcomponents=Numeric.extractComponentstunedCoefficientpointIndex=componentsAmount+(tunedExponent`div`4)1(tunedCoefficient,tunedExponent)=casemodexponent4of0->(coefficient,exponent)x->(coefficient*10^x,exponentx)trimmedExponent=iftunedExponent>=0then0elsenegatetunedExponentsignCode=ifcoefficient<0thenNumeric.negSignCodeelseNumeric.posSignCodeuuid::EncoderUUIDuuid=premapUUID.toWords(tuple4int4_word32int4_word32int4_word32int4_word32)json_ast::EncoderAeson.Value#if MIN_VERSION_aeson(0,10,0)json_ast=Aeson.fromEncoding.Aeson.toEncoding#elsejson_ast=Builder.lazyByteString.Aeson.encode#endifjson_bytes::EncoderByteStringjson_bytes=Builder.byteStringjsonb_ast::EncoderAeson.Valuejsonb_ast=\x->"\1"<>json_astxjsonb_bytes::EncoderByteStringjsonb_bytes=\x->"\1"<>Builder.byteStringxchar::EncoderCharchar=Builder.charUtf8text_strict::EncoderTexttext_strict=Text.encodeUtf8BuilderEscapedBuilderPrim.nullByteIgnoringBoundedPrimtext_lazy::EncoderLazyText.Texttext_lazy=LazyText.encodeUtf8BuilderEscapedBuilderPrim.nullByteIgnoringBoundedPrimbytea_strict::EncoderByteStringbytea_strict=Builder.byteStringbytea_lazy::EncoderLazyByteString.ByteStringbytea_lazy=Builder.lazyByteStringdate::EncoderDaydate=int4_int32.fromIntegral.Time.dayToPostgresJuliantime_int::EncoderTimeOfDaytime_int(TimeOfDayhms)=letp=unsafeCoerces::Integeru=p`div`(10^6)inint8_int64(fromIntegralu+10^6*60*(fromIntegralm+60*fromIntegralh))time_float::EncoderTimeOfDaytime_float(TimeOfDayhms)=letp=unsafeCoerces::Integeru=p`div`(10^6)infloat8(fromIntegralu/10^6+60*(fromIntegralm+60*(fromIntegralh)))timetz_int::Encoder(TimeOfDay,TimeZone)timetz_int(timeX,tzX)=time_inttimeX<>tztzXtimetz_float::Encoder(TimeOfDay,TimeZone)timetz_float(timeX,tzX)=time_floattimeX<>tztzXtz::EncoderTimeZonetz=int4_int.(*60).negate.timeZoneMinutestimestamp_int::EncoderLocalTimetimestamp_int=int8_int64.Time.localTimeToMicrostimestamp_float::EncoderLocalTimetimestamp_float=float8.Time.localTimeToSecstimestamptz_int::EncoderUTCTimetimestamptz_int=int8_int64.Time.utcToMicrostimestamptz_float::EncoderUTCTimetimestamptz_float=float8.Time.utcToSecsinterval_int::EncoderDiffTimeinterval_intx=Builder.int64BEu<>Builder.int32BEd<>Builder.int32BEmwhereInterval.Intervaludm=fromMaybe(error("Too large DiffTime value for an interval "<>showx))$Interval.fromDiffTimexinterval_float::EncoderDiffTimeinterval_floatx=Builder.doubleBEs<>Builder.int32BEd<>Builder.int32BEmwhereInterval.Intervaludm=fromMaybe(error("Too large DiffTime value for an interval "<>showx))$Interval.fromDiffTimexs=fromIntegralu/(10^6)newtypeArrayEncodera=ArrayEncoder(a->(Builder,[Int32],Bool))array::Word32->ArrayEncodera->Encoderaarrayoid(ArrayEncoderencoder)=\value->let(valuesBuilder,dimensions,nulls)=encodervalue(dimensionsAmount,dimensionsBuilder)=letstep(amount,builder)dimension=(succamount,builder<>Builder.int32BEdimension<>Builder.word32BE1)init=(0,mempty)infoldl'stepinitdimensionsnullsBuilder=Builder.word32BE(ifnullsthen1else0)inBuilder.word32BEdimensionsAmount<>nullsBuilder<>Builder.word32BEoid<>dimensionsBuilder<>valuesBuilderarrayValue::Encodera->ArrayEncoderaarrayValueencoder=ArrayEncoder$\value->letbytes=runencodervaluebuilder=Builder.word32BE(fromIntegral(ByteString.lengthbytes))<>Builder.byteStringbytesin(builder,[],False)arrayNullableValue::Encodera->ArrayEncoder(Maybea)arrayNullableValueencoder=ArrayEncoder$\caseNothing->(int4_int32(1),[],True)Justvalue->letbytes=runencodervaluebuilder=Builder.word32BE(fromIntegral(ByteString.lengthbytes))<>Builder.byteStringbytesin(builder,[],False)arrayDimension::(foralla.(a->b->a)->a->c->a)->ArrayEncoderb->ArrayEncodercarrayDimensionfoldl(ArrayEncoderencoder)=ArrayEncoder$\value->letstep(builder,_,length,nulls)value=let(valueBuilder,valueDimensions,valueNulls)=encodervaluein(builder<>valueBuilder,valueDimensions,succlength,nulls||valueNulls)init=(mempty,[],0,False)(foldedBuilder,foldedDimensions,foldedLength,foldedNulls)=foldlstepinitvalueresultDimensions=foldedLength:foldedDimensionsin(foldedBuilder,resultDimensions,foldedNulls)arrayRep::EncoderData.ArrayarrayRep(dimensionsV,valuesV,nullsV,oidV)=dimensionsLength<>nulls<>oid<>dimensions<>valueswheredimensionsLength=int4_word32$fromIntegral$Vector.lengthdimensionsVnulls=int4_word32$ifnullsVthen1else0oid=int4_word32oidVdimensions=foldMapdimensiondimensionsVvalues=foldMapvaluevaluesVdimension(w,l)=int4_word32w<>int4_word32lvalue=\caseNothing->int4_int32(1)Justb->int4_int32(fromIntegral(ByteString.lengthb))<>Builder.byteStringbhstore::(foralla.(a->(Text,MaybeText)->a)->a->b->a)->Encoderbhstorefoldl=fold&\(Foldl.Foldstepinitfin)->fin.foldlstepinitwherefold=(<>)<$>componentsAmount<*>componentswherecomponentsAmount=fmapint4_intFoldl.lengthcomponents=Foldl.foldMapcomponentBuilderidwherecomponentBuilder(key,value)=text_strictkey<>maybetext_strictvaluehstoreRep::EncoderData.HStorehstoreRepvector=int4_int32(fromIntegral(Vector.lengthvector))<>foldMapcomponentvectorwherecomponent(key,value)=Builder.byteStringkey<>contentvalueenum::(a->Text)->EncoderaenumasText=text_strict.asText
[8]ページ先頭