libsim  Versione6.3.0

◆ dbasession_ingest_metaanddata()

subroutine dballe_class::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 3403 del file dballe_class.F03.

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

Generated with Doxygen.