<< Masa.20100924-check-sl_entry | 2010 | Masa.20100922-trace-limitation-data-flow-in-bsv_xml >>
Focus on and trace one of @app.uddate method in bsv_xml.rb
Experiment
src/util/persistence.rb
def issue_update(hook, values, origin = nil, masa = nil)
obj = resolve(hook)
if masa
print "obj="
pp obj
end
unless(obj.nil?)
diff = obj.diff(values, hook)
if masa
print "diff="
pp diff
print "diff.empty?=", diff.empty?, "\n"
end
Result
txt_ptr=#<ODDB::Persistence::Pointer:0x7f43560cb0c0 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "011"], [:sl_entry], [:limitation_text]]>
obj=#<ODDB::LimitationText:0x7f43560c3eb0
@descriptions=
{"it"=>
#<ODDB::Text::Chapter:0x7f43560c37f8
@heading="",
@sections=
[#<ODDB::Text::Section:0x7f43560c36b8
@paragraphs=
[#<ODDB::Text::Paragraph:0x7f43560c3578
@format=
#<ODDB::Text::Format:0x7f43560c3488 @end=-1, @start=0, @values=[]>,
@formats=
[#<ODDB::Text::Format:0x7f43560c3488
@end=-1,
@start=0,
@values=[]>],
@preformatted=false,
@raw_txt=nil,
@text="Forme gravi di acne, resistenti alla terapia.">],
@subheading="Isotretinoine Mepha\n">]>,
"fr"=>
#<ODDB::Text::Chapter:0x7f43560c2f88
@heading="",
@sections=
[#<ODDB::Text::Section:0x7f43560c2ee8
@paragraphs=
[#<ODDB::Text::Paragraph:0x7f43560c2e48
@format=
#<ODDB::Text::Format:0x7f43560c2dd0 @end=-1, @start=0, @values=[]>,
@formats=
[#<ODDB::Text::Format:0x7f43560c2dd0
@end=-1,
@start=0,
@values=[]>],
@preformatted=false,
@raw_txt=nil,
@text=
"Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie.">],
@subheading="Isotretinoine Mepha\n">]>,
"de"=>
#<ODDB::Text::Chapter:0x7f43560c3258
@heading="",
@sections=
[#<ODDB::Text::Section:0x7f43560c31b8
@paragraphs=
[#<ODDB::Text::Paragraph:0x7f43560c30f0
@format=
#<ODDB::Text::Format:0x7f43560c3078 @end=-1, @start=0, @values=[]>,
@formats=
[#<ODDB::Text::Format:0x7f43560c3078
@end=-1,
@start=0,
@values=[]>],
@preformatted=false,
@raw_txt=nil,
@text="Schwere, therapieresistente Akneformen.">],
@subheading="Isotretinoin Mepha\n">]>},
@odba_id=25010629,
@odba_observers=[],
@odba_persistent=true,
@oid=25010629,
@pointer=
#<ODDB::Persistence::Pointer:0x7f43560c3c80
@directions=
[[:registration, "55972"],
[:sequence, "01"],
[:package, "011"],
[:sl_entry],
[:limitation_text]]>,
@revision=Thu Sep 23 07:58:27 +0200 2010>
diff={}
diff.empty?=true
....
txt_ptr=#<ODDB::Persistence::Pointer:0x7f4355a73970 @directions=[[:registration, "56107"], [:sequence, "02"], [:package, "008"], [:sl_entry], [:limitation_text]]>
obj=#<ODDB::LimitationText:0x7f4355a6e718
@descriptions=
{"it"=>
#<ODDB::Text::Chapter:0x7f4355a6e420
@heading="",
@sections=
[#<ODDB::Text::Section:0x7f4355a6e308
@paragraphs=
[#<ODDB::Text::Paragraph:0x7f4355a6e240
@format=
#<ODDB::Text::Format:0x7f4355a6e178 @end=-1, @start=0, @values=[]>,
@formats=
[#<ODDB::Text::Format:0x7f4355a6e178
@end=-1,
@start=0,
@values=[]>],
@preformatted=false,
@raw_txt=nil,
@text="Forme gravi di acne, resistenti alla terapia.">],
@subheading="Isotretinoin Teva\n">]>,
"fr"=>
#<ODDB::Text::Chapter:0x7f4355a6dc78
@heading="",
@sections=
[#<ODDB::Text::Section:0x7f4355a6dbd8
@paragraphs=
[#<ODDB::Text::Paragraph:0x7f4355a6db60
@format=
#<ODDB::Text::Format:0x7f4355a6dae8 @end=-1, @start=0, @values=[]>,
@formats=
[#<ODDB::Text::Format:0x7f4355a6dae8
@end=-1,
@start=0,
@values=[]>],
@preformatted=false,
@raw_txt=nil,
@text=
"Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie.">],
@subheading="Isotretinoin Teva\n">]>,
"de"=>
#<ODDB::Text::Chapter:0x7f4355a6df20
@heading="",
@sections=
[#<ODDB::Text::Section:0x7f4355a6de80
@paragraphs=
[#<ODDB::Text::Paragraph:0x7f4355a6de08
@format=
#<ODDB::Text::Format:0x7f4355a6dd90 @end=-1, @start=0, @values=[]>,
@formats=
[#<ODDB::Text::Format:0x7f4355a6dd90
@end=-1,
@start=0,
@values=[]>],
@preformatted=false,
@raw_txt=nil,
@text="Schwere, therapieresistente Akneformen.">],
@subheading="Isotretinoin Teva\n">]>},
@odba_id=11081913,
@odba_observers=[],
@odba_persistent=true,
@oid=11081913,
@pointer=
#<ODDB::Persistence::Pointer:0x7f4355a6d958
@directions=
[[:registration, "56107"],
[:sequence, "02"],
[:package, "008"],
[:sl_entry],
[:limitation_text]]>,
@revision=Thu May 13 03:29:09 +0200 2010>
diff={}
diff.empty?=true
Notes
Next question
Confirm (there is no limitation data in odba cache)
src/util/oddbapp.rb
def initialize opts={}
@rss_mutex = Mutex.new
@admin_threads = ThreadGroup.new
start = Time.now
@system = ODBA.cache.fetch_named('oddbapp', self){
OddbPrevalence.new
}
p @system.registrations.length
print "registration no. = 55972\n"
p @systemregistraions['55972'].packages.length
p @systemregistraions['55972'].packages[0].limitation_text
print "registration no. = 56107\n"
p @systemregistraions['56107'].packages.length
p @systemregistraions['56107'].packages[0].limitation_text
Result
9759 registration no. = 55972 6 #<ODBA::Stub:70292215553140#25010630 @odba_class= @odba_container=70292215554380#788738> "Isotretinoin Mepha\n\nSchwere, therapieresistente Akneformen." registration no. = 56107 4 nil ""
Notes
Experiment
src/util/persistence.rb
def issue_update(hook, values, origin = nil, masa = nil)
obj = resolve(hook)
print "obj.class=", obj.class, "\n" if masa #=> =ODDB::LimitationText
if masa
print "========== ODBA Cache ==========\n"
pp obj
end
unless(obj.nil?)
diff = obj.diff(values, hook)
if masa
print "__________ diff __________\n"
print "diff="
pp diff
print "diff.empty?=", diff.empty?, "\n"
end
Result
pointer=#<ODDB::Persistence::Pointer:0x7f1a506244d8 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "011"], [:sl_entry]]>
obj.class=ODDB::SlEntry
========== ODBA Cache ==========
#<ODDB::SlEntry:0x7f1a5061e330
@bsv_dossier="17846",
@data_origins=
{"status"=>:bag,
"introduction_date"=>:bag,
"valid_from"=>:bag,
"limitation"=>:bag,
"limitation_points"=>:bag,
"valid_until"=>:bag,
"bsv_dossier"=>:bag},
@introduction_date=Sat, 01 Feb 2003,
@limitation=true,
@limitation_points=nil,
@limitation_text=
#<ODDB::LimitationText:0x7f1a5061d700
@odba_class=nil,
@odba_container=nil,
@odba_id=25010629,
@receiver=nil,
@receiver_loaded=nil>,
@odba_id=788739,
@odba_observers=[],
@odba_persistent=true,
@odba_prefetch=false,
@odba_target_ids=nil,
@oid=788739,
@pointer=
#<ODDB::Persistence::Pointer:0x7f1a5061da70
@directions=
[[:registration, "55972"],
[:sequence, "01"],
[:package, "011"],
[:sl_entry]]>,
@revision=Thu Sep 23 11:26:55 +0200 2010,
@status="0",
@valid_from=Sat, 01 Feb 2003,
@valid_until=Fri, 31 Dec 9999>
__________ diff __________
diff={:limitation_points=>nil}
diff.empty?=false
pointer=#<ODDB::Persistence::Pointer:0x7f1a505f24d8 @directions=[[:registration, "55972"], [:sequence, "01"], [:package, "009"], [:sl_entry]]>
obj.class=ODDB::SlEntry
========== ODBA Cache ==========
#<ODDB::SlEntry:0x7f1a59f48b50
@bsv_dossier="17846",
@data_origins=
{"status"=>:bag,
"introduction_date"=>:bag,
"valid_from"=>:bag,
"limitation"=>:bag,
"limitation_points"=>:bag,
"valid_until"=>:bag,
"bsv_dossier"=>:bag},
@introduction_date=Sat, 01 Feb 2003,
@limitation=true,
@limitation_points=nil,
@limitation_text=
#<ODDB::LimitationText:0x7f1a59f45658
@descriptions=
{"it"=>
#<ODDB::Text::Chapter:0x7f1a59f45018
@heading="",
@sections=
[#<ODDB::Text::Section:0x7f1a59f44f00
@paragraphs=
[#<ODDB::Text::Paragraph:0x7f1a59f44de8
@format=
#<ODDB::Text::Format:0x7f1a59f44cf8
@end=-1,
@start=0,
@values=[]>,
@formats=
[#<ODDB::Text::Format:0x7f1a59f44cf8
@end=-1,
@start=0,
@values=[]>],
@preformatted=false,
@raw_txt=nil,
@text="Forme gravi di acne, resistenti alla terapia.">],
@subheading="Isotretinoine Mepha\n">]>,
"fr"=>
#<ODDB::Text::Chapter:0x7f1a59f44870
@heading="",
@sections=
[#<ODDB::Text::Section:0x7f1a59f447d0
@paragraphs=
[#<ODDB::Text::Paragraph:0x7f1a59f44730
@format=
#<ODDB::Text::Format:0x7f1a59f446b8
@end=-1,
@start=0,
@values=[]>,
@formats=
[#<ODDB::Text::Format:0x7f1a59f446b8
@end=-1,
@start=0,
@values=[]>],
@preformatted=false,
@raw_txt=nil,
@text=
"Formes graves de l'acn\303\251, r\303\251sistantes \303\240 la th\303\251rapie.">],
@subheading="Isotretinoine Mepha\n">]>,
"de"=>
#<ODDB::Text::Chapter:0x7f1a59f44b18
@heading="",
@sections=
[#<ODDB::Text::Section:0x7f1a59f44a78
@paragraphs=
[#<ODDB::Text::Paragraph:0x7f1a59f449d8
@format=
#<ODDB::Text::Format:0x7f1a59f44960
@end=-1,
@start=0,
@values=[]>,
@formats=
[#<ODDB::Text::Format:0x7f1a59f44960
@end=-1,
@start=0,
@values=[]>],
@preformatted=false,
@raw_txt=nil,
@text="Schwere, therapieresistente Akneformen.">],
@subheading="Isotretinoin Mepha\n">]>},
@odba_id=25010630,
@odba_observers=[],
@odba_persistent=true,
@oid=25010630,
@pointer=
#<ODDB::Persistence::Pointer:0x7f1a59f45428
@directions=
[[:registration, "55972"],
[:sequence, "01"],
[:package, "009"],
[:sl_entry],
[:limitation_text]]>,
@revision=Thu Sep 23 07:58:27 +0200 2010>,
@odba_id=788738,
@odba_observers=[],
@odba_persistent=true,
@odba_prefetch=false,
@odba_target_ids=nil,
@oid=788738,
@pointer=
#<ODDB::Persistence::Pointer:0x7f1a59f48498
@directions=
[[:registration, "55972"],
[:sequence, "01"],
[:package, "009"],
[:sl_entry]]>,
@revision=Thu Sep 23 11:26:55 +0200 2010,
@status="0",
@valid_from=Sat, 01 Feb 2003,
@valid_until=Fri, 31 Dec 9999>
__________ diff __________
diff={:limitation_points=>nil}
diff.empty?=false
pointer=#<ODDB::Persistence::Pointer:0x7f1a500c36b0 @directions=[[:registration, "56107"], [:sequence, "02"], [:package, "008"], [:sl_entry]]>
obj.class=ODDB::SlEntry
========== ODBA Cache ==========
#<ODDB::SlEntry:0x7f1a500bdff8
@bsv_dossier="17885",
@data_origins=
{"status"=>:bag,
"introduction_date"=>:bag,
"valid_from"=>:bag,
"limitation_points"=>:bag,
"limitation"=>:bag,
"valid_until"=>:bag,
"bsv_dossier"=>:bag},
@introduction_date=Thu, 01 May 2003,
@limitation=true,
@limitation_points=nil,
@odba_id=24334829,
@odba_observers=[],
@odba_persistent=true,
@oid=24334829,
@pointer=
#<ODDB::Persistence::Pointer:0x7f1a500bd990
@directions=
[[:registration, "56107"],
[:sequence, "02"],
[:package, "008"],
[:sl_entry]]>,
@revision=Thu Sep 23 11:26:55 +0200 2010,
@status="0",
@valid_from=Thu, 01 May 2003,
@valid_until=Fri, 31 Dec 9999>
__________ diff __________
diff={:limitation_points=>nil}
diff.empty?=false
Notes
Read ODDB::Persistence#diff method
def diff(values, app=nil)
#adjust_types(values, app)
result = {}
adjust_types(values, app).each { |key, value|
if(self.respond_to?(key))
oldval = self.send(key)
if(oldval.nil? || undiffable?(oldval) || value != oldval)
result.store(key, value)
end
end
}
result
end
BraSt
I just testted to delete and return the limitation description in Preparation.xml.
Case 1: good case: it is possible to delete 'L' and return 'L'
Before

After

Case 2: bad case: once deleting 'L', 'L' will never come back
Before

After

Notes
Questions
Solution