libsim Versione 7.2.0

◆ dbasession_ingest_metaanddata()

subroutine dbasession_ingest_metaanddata ( class(dbasession), intent(inout)  session,
type(dbametaanddata), intent(inout), optional  metaanddata,
logical, intent(in), optional  noattr,
type(dbafilter), intent(in), optional  filter 
)
private

get data from DSN

Parametri
[in,out]metaanddataingested data
[in]noattrset to .true. to get data only (no attribute)
[in]filteruse this to filter wanted data

Definizione alla linea 3372 del file dballe_class.F03.

3373 else
3374
3375 if (lstarvars) then
3376
3377 allocate (metaanddata%dataattrv%dataattr(1)%attrv%dcv(size(starvars%dcv)))
3378 do j = 1, size(starvars%dcv)
3379 allocate (metaanddata%dataattrv%dataattr(1)%attrv%dcv(j)%dat,source=starvars%dcv(j)%dat)
3380 end do
3381
3382 if (c_e(session%count) .and. session%count > 0) then
3383
3384 ier = idba_voglioancora(session%sehandle, acount)
3385 do k =1,acount
3386 ier = idba_ancora(session%sehandle, btable)
3387 ier = idba_enq(session%sehandle, btable,value)
3388
3389 do j=1,size(metaanddata%dataattrv%dataattr(1)%attrv%dcv)
3390
3391 if (metaanddata%dataattrv%dataattr(1)%attrv%dcv(j)%dat%btable == btable) then
3392
3393 select type ( dat => metaanddata%dataattrv%dataattr(1)%attrv%dcv(j)%dat )
3394 type is (dbadatai)
3395 ier = idba_enq(session%sehandle, btable,dat%value)
3396 type is (dbadatar)
3397 ier = idba_enq(session%sehandle, btable,dat%value)
3398 type is (dbadatad)
3399 ier = idba_enq(session%sehandle, btable,dat%value)
3400 type is (dbadatab)
3401 ier = idba_enq(session%sehandle, btable,dat%value)
3402 type is (dbadatac)
3403 ier = idba_enq(session%sehandle, btable,dat%value)
3404 end select
3405
3406 end if
3407 end do
3408 end do
3409 end if
3410 else
3411 if (c_e(session%count) .and. session%count > 0) then
3412 ier = idba_voglioancora(session%sehandle, acount)
3413
3414 allocate (metaanddata%dataattrv%dataattr(1)%attrv%dcv(acount))
3415 do j =1,acount
3416 ier = idba_ancora(session%sehandle, btable)
3417 ier = idba_enq(session%sehandle, btable,value)
3418 allocate (metaanddata%dataattrv%dataattr(1)%attrv%dcv(j)%dat,source=dbadatac(btable,value))
3419 end do
3420 else
3421 allocate (metaanddata%dataattrv%dataattr(1)%attrv%dcv(0))
3422 end if
3423 end if
3424 end if
3425
3426 if (c_e(session%count)) then
3427 session%count=session%count-1
3428
3429 if (session%count > 0 ) then
3430 ier = idba_dammelo(session%sehandle, btable)
3431 end if
3432 end if
3433 end if
3434!!$ SOLVED by https://github.com/ARPA-SIMC/dballe/issues/73
3435!!$ !reading from file get some variable not in filter so we can have some attrv%dcv not allocated
3436 do i=1,size(metaanddata%dataattrv%dataattr)
3437 if (.not.allocated(metaanddata%dataattrv%dataattr(i)%attrv%dcv)) then
3438 allocate (metaanddata%dataattrv%dataattr(i)%attrv%dcv(0))
3439 endif
3440 end do
3441
3442end if
3443
3444end subroutine dbasession_ingest_metaanddata
3445
3446
3448subroutine dbasession_ingest_metaanddatav(session,metaanddatav,noattr,filter)
3449class(dbasession), intent(inout) :: session
3450type(dbametaanddata), intent(inout),allocatable :: metaanddatav(:)
3451logical, intent(in),optional :: noattr
3452type(dbafilter),intent(in),optional :: filter
3453
3454type(dbametaanddata),allocatable :: metaanddatavbuf(:)
3455integer :: i
3456
3457!todo aggiungere anche altrove dove passato filter
3458if (present(filter)) then
3459 call filter%dbaset(session)
3460else
3461 call session%unsetall()
3462endif
3463
3464call session%ingest()
3465!print*," count: ",session%count
3466
3467if (c_e(session%count)) then
3468 ! allocate to max dimension
3469 allocate(metaanddatavbuf(session%count))
3470 i=0
3471 do while (session%count >0)
3472 i=i+1
3473 call session%ingest(metaanddatavbuf(i),noattr=noattr,filter=filter)
3474 end do
3475
3476! compact data to real dimension
3477 IF (SIZE(metaanddatavbuf) == i) THEN
3478! space/time optimization in common case of no filter
3479 CALL move_alloc(metaanddatavbuf, metaanddatav)
3480 ELSE
3481! allocate (metaanddatav(i))
3482 metaanddatav=metaanddatavbuf(:i)
3483 DEALLOCATE(metaanddatavbuf)
3484 ENDIF
3485
3486else
3487 if (allocated(metaanddatav)) deallocate(metaanddatav)
3488 allocate(metaanddatav(0))
3489end if
3490
3491
3492end subroutine dbasession_ingest_metaanddatav
3493
3494
3496subroutine dbasession_ingest_metaanddatal(session,metaanddatal,noattr,filter)
3497class(dbasession), intent(inout) :: session
3498type(dbametaanddatalist), intent(out) :: metaanddatal
3499logical, intent(in),optional :: noattr
3500type(dbafilter),intent(in),optional :: filter
3501
3502type(dbametaanddata),allocatable :: metaanddatavbuf(:)
3503integer :: i
3504
3505if (session%memdb .and. .not. session%loadfile)then
3506
3507 do while (session%messages_read_next())
3508 call session%set(filter=filter)
3509 call session%ingest()
3510 call session%ingest(metaanddatavbuf,noattr=noattr,filter=filter)
3511 do i=1,size(metaanddatavbuf)
3512 call metaanddatal%append(metaanddatavbuf(i))
3513 end do
3514
3515 call session%remove_all()
3516 deallocate (metaanddatavbuf)
3517 end do
3518
3519else
3520
3521 call session%ingest()
3522
3523 do while (c_e(session%count) .and. session%count >0)
3524 call session%ingest(metaanddatavbuf,noattr=noattr,filter=filter)
3525 do i=1,size(metaanddatavbuf)
3526 if (present(filter)) then
3527 ! exclude contextana data from file
3528 if (filter%contextana) then
3529 if (datetime_new() /= metaanddatavbuf(i)%metadata%datetime%datetime) cycle
3530 end if
3531 end if
3532 call metaanddatal%append(metaanddatavbuf(i))
3533 end do
3534 if (session%file) call session%ingest()
3535 deallocate (metaanddatavbuf)
3536 end do
3537end if
3538
3539end subroutine dbasession_ingest_metaanddatal
3540
3542subroutine dbasession_ingest_metaanddatai(session,metaanddata)
3543class(dbasession), intent(inout) :: session
3544type(dbametaanddatai), intent(inout),optional :: metaanddata
3545
3546integer :: ier
3547character(len=9) :: btable
3548integer :: value
3549
3550if (.not. present(metaanddata)) then
3551 ier = idba_voglioquesto(session%sehandle, session%count)
3552else
3553 ier = idba_dammelo(session%sehandle, btable)
3554 ier = idba_enq(session%sehandle, btable,value)
3555 metaanddata%dbadatai=dbadatai(btable,value)
3556 call metaanddata%metadata%dbaenq(session)
3557 session%count=session%count-1
3558end if
3559end subroutine dbasession_ingest_metaanddatai
3560
3561
3563subroutine dbasession_ingest_metaanddataiv(session,metaanddatav)
3564class(dbasession), intent(inout) :: session
3565type(dbametaanddatai), intent(inout),allocatable :: metaanddatav(:)
3566
3567integer :: i
3568
3569call session%ingest_metaanddatai()
3570if (c_e(session%count)) then
3571 allocate(metaanddatav(session%count))
3572 i=0
3573 do while (session%count >0)
3574 i=i+1
3575 call session%ingest_metaanddatai(metaanddatav(i))
3576 end do
3577else
3578 allocate(metaanddatav(0))
3579end if
3580
3581end subroutine dbasession_ingest_metaanddataiv
3582
3583
3585subroutine dbasession_ingest_metaanddatab(session,metaanddata)
3586class(dbasession), intent(inout) :: session
3587type(dbametaanddatab), intent(inout),optional :: metaanddata
3588
3589integer :: ier
3590character(len=9) :: btable
3591integer(kind=int_b) :: value
3592
3593if (.not. present(metaanddata)) then
3594 ier = idba_voglioquesto(session%sehandle, session%count)
3595else
3596 ier = idba_dammelo(session%sehandle, btable)
3597 ier = idba_enq(session%sehandle, btable,value)
3598 metaanddata%dbadatab=dbadatab(btable,value)
3599 call metaanddata%metadata%dbaenq(session)
3600 session%count=session%count-1
3601end if
3602end subroutine dbasession_ingest_metaanddatab
3603
3604
3606subroutine dbasession_ingest_metaanddatabv(session,metaanddatav)
3607class(dbasession), intent(inout) :: session
3608type(dbametaanddatab), intent(inout),allocatable :: metaanddatav(:)
3609
3610integer :: i
3611
3612call session%ingest_metaanddatab()
3613if (c_e(session%count)) then
3614 allocate(metaanddatav(session%count))
3615 i=0
3616 do while (session%count >0)
3617 i=i+1
3618 call session%ingest_metaanddatab(metaanddatav(i))
3619 end do
3620else
3621 allocate(metaanddatav(0))
3622end if
3623
3624end subroutine dbasession_ingest_metaanddatabv
3625
3626
3628subroutine dbasession_ingest_metaanddatad(session,metaanddata)
3629class(dbasession), intent(inout) :: session
3630type(dbametaanddatad), intent(inout),optional :: metaanddata
3631

Generated with Doxygen.