11 use,
intrinsic :: iso_c_binding
15 integer,
parameter :: max_varlen = 128
16 integer(kind=4) :: ncolumns
18 write(0,*)
"Calling odb_start..."
31 type(c_ptr) :: odb_handle, odb_it
32 integer(kind=C_INT) :: cerr
33 character(kind=C_CHAR, len=64) :: config = c_null_char
34 type(c_ptr) :: ptr_colname
35 type(c_ptr) :: ptr_bitfield_names
36 type(c_ptr) :: ptr_bitfield_sizes
37 character(kind=C_CHAR),
dimension(:),
pointer :: f_ptr_colname
38 character(kind=C_CHAR,len=1),
dimension(:),
pointer :: f_ptr_bitfield_names
39 character(kind=C_CHAR,len=1),
dimension(:),
pointer :: f_ptr_bitfield_sizes
40 character(len=max_varlen) :: colname
41 character(len=max_varlen) :: bitfield_names
42 character(len=max_varlen) :: bitfield_sizes
43 integer(kind=4) :: i, ci
45 character(kind=C_CHAR, len=2048) :: sql=
'select partition_number,number_of_rows from &
46 &"local://stage,class=OD,date=20151108,time=1200,type=OFB,&
47 &obsgroup=conv,reportype=16030,stream=oper,expver=qu12,&
48 &odbpathnameschema=''{date}/{time}/{reportype}.odb'',&
49 &odbserverroots=''~/data/root'',&
50 &partitionsinfo=''~/data/partitions_info.txt'',&
52 &database=localhost";'//achar(0)
53 integer(kind=C_INT) :: itype, newdataset, c_ncolumns=2, size_name
54 integer(kind=C_INT) :: bitfield_names_size, bitfield_sizes_size
55 real(kind=c_double),
dimension(:),
allocatable:: one_row
56 character(len=8) :: tmp_str
58 write(0,*)
'example_fortran_api_stage_local: ', sql
68 write(0,*)
'-=-=-=-=-= example_fortran_api_stage_local: number of columns: ', ncolumns
69 if (ncolumns /= 2) stop 2
74 call c_f_pointer(cptr=ptr_colname, fptr=f_ptr_colname, shape=(/size_name/));
76 colname(i:i) = f_ptr_colname(i)
78 write(0,*)
' : ', colname(1:i)
81 allocate(one_row(c_ncolumns))
91 write(0,*)
'-=-=-=-=-= example_fortran_api_stage_local: number of rows: ', i
100 type(c_ptr) :: odb_handle, odb_it
101 integer(kind=C_INT) :: cerr
102 character(kind=C_CHAR, len=64) :: config = c_null_char
103 type(c_ptr) :: ptr_colname
104 type(c_ptr) :: ptr_bitfield_names
105 type(c_ptr) :: ptr_bitfield_sizes
106 character(kind=C_CHAR),
dimension(:),
pointer :: f_ptr_colname
107 character(kind=C_CHAR,len=1),
dimension(:),
pointer :: f_ptr_bitfield_names
108 character(kind=C_CHAR,len=1),
dimension(:),
pointer :: f_ptr_bitfield_sizes
109 character(len=max_varlen) :: colname
110 character(len=max_varlen) :: bitfield_names
111 character(len=max_varlen) :: bitfield_sizes
112 integer(kind=4) :: i, ci
114 character(kind=C_CHAR, len=2048) :: sql=
'select * from &
115 & "local://retrieve,class=OD,date=20151108,time=1200,type=OFB,&
116 & obsgroup=conv,reportype=16030,stream=oper,expver=qu12,&
117 & odbpathnameschema=''{date}/{time}/{reportype}.odb'',&
118 & odbserverroots=''~/data/root'',&
119 & partitionsinfo=''~/data/partitions_info.txt'',&
122 & database=localhost";'//achar(0)
123 integer(kind=C_INT) :: itype, newdataset, c_ncolumns=52, size_name
124 integer(kind=C_INT) :: bitfield_names_size, bitfield_sizes_size
125 real(kind=c_double),
dimension(:),
allocatable:: one_row
126 character(len=8) :: tmp_str
128 write(0,*)
'example_fortran_api_retrieve_part_local: ', sql
138 write(0,*)
'-=-=-=-=-= example_fortran_api_retrieve_part_local: number of columns: ', ncolumns
139 if (c_ncolumns /= ncolumns) stop 2
141 do ci=0, ncolumns - 1
144 call c_f_pointer(cptr=ptr_colname, fptr=f_ptr_colname, shape=(/size_name/));
146 colname(i:i) = f_ptr_colname(i)
148 write(0,*)
' : ', colname(1:i)
151 allocate(one_row(c_ncolumns))
161 write(0,*)
'-=-=-=-=-= example_fortran_api_retrieve_part_local: number of rows: ', i
162 if (i /= 9938) stop 22
Initialize ODB API. This function must be called before any other function from the ODB API.
subroutine example_fortran_api_stage_local
program test_client_lib_fortran_local
subroutine example_fortran_api_retrieve_part_local
Provides Fortran bindings for ODB API.