<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: data code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 07 Sep 2008 08:50:49 GMT</pubDate>
    <description>DZone Snippets: data code</description>
    <item>
      <title>Basic Trie data structure in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/5616</link>
      <description>&lt;code&gt;&lt;br /&gt;# Inspired by http://www.rubyquiz.com/quiz103.html&lt;br /&gt;# cf. also http://en.wikipedia.org/wiki/Trie&lt;br /&gt;&lt;br /&gt;#!/usr/local/bin/ruby -w&lt;br /&gt;&lt;br /&gt;require 'pp'&lt;br /&gt;&lt;br /&gt;class Hash&lt;br /&gt;&lt;br /&gt;   def deep_merge!(second)&lt;br /&gt;      # cf. http://snippets.dzone.com/posts/show/4146&lt;br /&gt;      merger = proc { |key,v1,v2| Hash === v1 &amp;&amp; Hash === v2 ? v1.merge(v2, &amp;merger) : v2 }&lt;br /&gt;      self.merge!(second, &amp;merger)&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def nested_hash(array)&lt;br /&gt;      node = self&lt;br /&gt;      array.each do |i|&lt;br /&gt;         node[i]=Hash.new if node[i].nil?&lt;br /&gt;         node = node[i]&lt;br /&gt;      end &lt;br /&gt;      self&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def merge_nested_hash!(nested_hash)&lt;br /&gt;      deep_merge!(nested_hash)&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   # code basis taken from: "Find every path and it's value in a Hash" by Florian A&#223;mann,&lt;br /&gt;   # http://snippets.dzone.com/posts/show/3565&lt;br /&gt;&lt;br /&gt;   def each_trie_path&lt;br /&gt;      raise ArgumentError unless block_given?&lt;br /&gt;      self.class.each_trie_path(self) { |path, object| yield(path, object) }&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   protected&lt;br /&gt;   def self.each_trie_path(object, path = [], &amp;block)  &lt;br /&gt;&lt;br /&gt;      if object.is_a?(Hash)&lt;br /&gt;         object.each do |key, value|&lt;br /&gt;&lt;br /&gt;            if key == true &amp;&amp; value == {}&lt;br /&gt;               if path == [:root]  # special case for empty string: [[:root], {true=&gt;{}}]&lt;br /&gt;                  yield(path, {true=&gt;{}})&lt;br /&gt;                  next&lt;br /&gt;               end&lt;br /&gt;               yield(path, object)&lt;br /&gt;            end&lt;br /&gt;&lt;br /&gt;            self.each_trie_path(value, [path , key].flatten, &amp;block)&lt;br /&gt;         end&lt;br /&gt;      else &lt;br /&gt;         yield(path, object)&lt;br /&gt;      end&lt;br /&gt;   end &lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Trie&lt;br /&gt;&lt;br /&gt;   @hash = Hash.new.merge_nested_hash!(Hash.new)&lt;br /&gt;   #@hash = Hash.new.merge_nested_hash!({:root=&gt;{}})&lt;br /&gt;   #@hash = Hash.new.merge_nested_hash!(Hash.new.nested_hash([:root]))&lt;br /&gt;   class &lt;&lt; self; attr_accessor :hash; end    # Trie.hash&lt;br /&gt;&lt;br /&gt;   def initialize&lt;br /&gt;      Trie.hash.merge_nested_hash!({:root=&gt;{}})&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def add_int(int)   # for int &gt;= 0&lt;br /&gt;      ia = int.to_s.scan(/[[:digit:]]/).map { |i| i.to_i }  # integer array; ex: [4,6,2]&lt;br /&gt;      ia.unshift(:root).push(true)&lt;br /&gt;      Trie.hash.merge_nested_hash!(Hash.new.nested_hash(ia))&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def matchi(int)  # match integer&lt;br /&gt;      ia = int.to_s.scan(/[[:digit:]]/).map { |i| i.to_i }  &lt;br /&gt;      node = Trie.hash.fetch(:root,nil)&lt;br /&gt;      ia.each do |digit|&lt;br /&gt;         node = node[digit]&lt;br /&gt;         #node = node.fetch(digit,nil)&lt;br /&gt;         return false unless node&lt;br /&gt;      end&lt;br /&gt;      node.fetch(true,nil) ? true : false&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def mfpi(int)   # match first part of integer&lt;br /&gt;      ia = int.to_s.scan(/[[:digit:]]/).map { |i| i.to_i }&lt;br /&gt;      node = Trie.hash.fetch(:root,nil)&lt;br /&gt;      ia.each do |digit|&lt;br /&gt;         node = node[digit]&lt;br /&gt;         return false unless node&lt;br /&gt;      end&lt;br /&gt;      return true&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def add_word(word)&lt;br /&gt;      ca = word.split(//u)    # UTF-8 aware character array&lt;br /&gt;      ca.unshift(:root).push(true)&lt;br /&gt;      Trie.hash.merge_nested_hash!(Hash.new.nested_hash(ca))&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def match(word)   # match entire word&lt;br /&gt;      ca = word.split(//u)    &lt;br /&gt;      node = Trie.hash.fetch(:root,nil)&lt;br /&gt;      ca.each do |char|&lt;br /&gt;         node = node[char]&lt;br /&gt;         #node = node.fetch(char,nil)&lt;br /&gt;         return false unless node&lt;br /&gt;      end&lt;br /&gt;      node.fetch(true,nil) ? true : false&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def mfpw(word)   # match first part of word&lt;br /&gt;      ca = word.split(//u)    &lt;br /&gt;      node = Trie.hash.fetch(:root,nil)&lt;br /&gt;      ca.each do |char|&lt;br /&gt;         node = node[char]&lt;br /&gt;         return false unless node&lt;br /&gt;      end&lt;br /&gt;      return true&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;trie = Trie.new&lt;br /&gt;p Trie.hash&lt;br /&gt;&lt;br /&gt;trie.add_word("word")&lt;br /&gt;pp Trie.hash            &lt;br /&gt;p trie.match("word")      &lt;br /&gt;p trie.match("word2")   &lt;br /&gt;trie.add_word("word2")&lt;br /&gt;p trie.match("word2")   &lt;br /&gt;pp Trie.hash            # {:root=&gt;{"w"=&gt;{"o"=&gt;{"r"=&gt;{"d"=&gt;{true=&gt;{}, "2"=&gt;{true=&gt;{}}}}}}}}&lt;br /&gt;&lt;br /&gt;trie.add_word("")&lt;br /&gt;p trie.match("")&lt;br /&gt;pp Trie.hash&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;p trie.match("word")      &lt;br /&gt;p trie.mfpw("wor")     # match first part of word&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;trie.add_int(12345)&lt;br /&gt;p Trie.hash&lt;br /&gt;&lt;br /&gt;trie.add_int(12980345)&lt;br /&gt;pp Trie.hash&lt;br /&gt;&lt;br /&gt;trie.add_int(8512)&lt;br /&gt;pp Trie.hash&lt;br /&gt;p trie.matchi(8512)&lt;br /&gt;p trie.matchi(85)&lt;br /&gt;p trie.mfpi(85)     # match first part of integer&lt;br /&gt;p trie.matchi(51)&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;pp Trie.hash&lt;br /&gt;paths = []&lt;br /&gt;Trie.hash.each_trie_path { |path, value| paths.push([ path ]) }&lt;br /&gt;#Trie.hash.each_trie_path { |path, value| paths.push([ path, value ]) }&lt;br /&gt;#pp paths&lt;br /&gt;puts&lt;br /&gt;paths.each { |x| p x }&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;require 'pp'&lt;br /&gt;&lt;br /&gt;class Hash&lt;br /&gt;   def Hash.new_nested_hash&lt;br /&gt;     Hash.new{|h,k| h[k]=Hash.new(&amp;h.default_proc) }&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Trie&lt;br /&gt;&lt;br /&gt;   @hash = Hash.new_nested_hash&lt;br /&gt;   #@hash = Hash.new_nested_hash.update(true=&gt;{})  # add empty string by default&lt;br /&gt;   class &lt;&lt; self; attr_accessor :hash; end    # Trie.hash&lt;br /&gt;&lt;br /&gt;   def &lt;&lt;(word)&lt;br /&gt;      ca = word.split(//u)    # UTF-8 aware character array&lt;br /&gt;      wl = ca.size            # word length&lt;br /&gt;      str = ""&lt;br /&gt;      wl.times { |x| str &lt;&lt; "[ca.at(#{x})]" }&lt;br /&gt;      str = "Trie.hash" &lt;&lt; str &lt;&lt; "[true]"&lt;br /&gt;      #p str     # example: "Trie.hash[ca.at(0)][ca.at(1)][ca.at(2)][ca.at(3)][true]"&lt;br /&gt;      eval(str)&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def match(word)&lt;br /&gt;      ca = word.split(//u)    # UTF-8 aware character array&lt;br /&gt;      wl = ca.size            # word length&lt;br /&gt;      str = ""&lt;br /&gt;&lt;br /&gt;      wl.times { |x| str &lt;&lt; ".fetch(ca.at(#{x}),nil)" }&lt;br /&gt;      str = "Trie.hash" &lt;&lt; str &lt;&lt; ".fetch(true,nil)"&lt;br /&gt;      #p str   # example: "Trie.hash.fetch(ca.at(0),nil).fetch(ca.at(1),nil).fetch(ca.at(2),nil).fetch(true,nil)"&lt;br /&gt;      ret = eval(str) rescue nil&lt;br /&gt;&lt;br /&gt;=begin&lt;br /&gt;      # alternative&lt;br /&gt;      wl.times { |x| str &lt;&lt; ".fetch(ca.at(#{x}),{})" }&lt;br /&gt;      str = "Trie.hash" &lt;&lt; str &lt;&lt; ".fetch(true,nil)"&lt;br /&gt;      #p str   # example: "Trie.hash.fetch(ca.at(0),{}).fetch(ca.at(1),{}).fetch(ca.at(2),{}).fetch(true,nil)"&lt;br /&gt;      ret = eval(str)&lt;br /&gt;=end&lt;br /&gt;&lt;br /&gt;      ret == {} ? true : false   # {} is the default value created by Trie.hash or Hash.new_nested_hash respectively&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;trie = Trie.new&lt;br /&gt;trie &lt;&lt; "word"&lt;br /&gt;pp Trie.hash            &lt;br /&gt;p trie.match("word")      &lt;br /&gt;p trie.match("word2")   &lt;br /&gt;trie &lt;&lt; "word2"&lt;br /&gt;p trie.match("word2")   &lt;br /&gt;pp Trie.hash            # {"w"=&gt;{"o"=&gt;{"r"=&gt;{"d"=&gt;{true=&gt;{}, "2"=&gt;{true=&gt;{}}}}}}}&lt;br /&gt;&lt;br /&gt;trie &lt;&lt; ""&lt;br /&gt;p trie.match("")&lt;br /&gt;pp Trie.hash&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# alternative with default :root element&lt;br /&gt;&lt;br /&gt;require 'pp'&lt;br /&gt;&lt;br /&gt;class Hash&lt;br /&gt;   def Hash.new_nested_hash&lt;br /&gt;     Hash.new{|h,k| h[k]=Hash.new(&amp;h.default_proc) }&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Hash&lt;br /&gt;&lt;br /&gt;   # code basis taken from: "Find every path and it's value in a Hash" by Florian A&#223;mann,&lt;br /&gt;   # http://snippets.dzone.com/posts/show/3565&lt;br /&gt;&lt;br /&gt;   def each_trie_path&lt;br /&gt;      raise ArgumentError unless block_given?&lt;br /&gt;      self.class.each_trie_path(self) { |path, object| yield(path, object) }&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   protected&lt;br /&gt;   def self.each_trie_path(object, path = [], &amp;block)  &lt;br /&gt;&lt;br /&gt;      if object.is_a?(Hash)&lt;br /&gt;         object.each do |key, value|&lt;br /&gt;&lt;br /&gt;            if key == true &amp;&amp; value == {}&lt;br /&gt;               if path == [:root]  # special case for empty string: [[:root], {true=&gt;{}}]&lt;br /&gt;                  yield(path, {true=&gt;{}})&lt;br /&gt;                  next&lt;br /&gt;               end&lt;br /&gt;               yield(path, object)&lt;br /&gt;            end&lt;br /&gt;&lt;br /&gt;            self.each_trie_path(value, [path , key].flatten, &amp;block)&lt;br /&gt;         end&lt;br /&gt;      else &lt;br /&gt;         yield(path, object)&lt;br /&gt;      end&lt;br /&gt;   end &lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Trie&lt;br /&gt;&lt;br /&gt;   @hash = Hash.new_nested_hash&lt;br /&gt;   class &lt;&lt; self; attr_accessor :hash; end    # Trie.hash&lt;br /&gt;&lt;br /&gt;   def initialize&lt;br /&gt;      Trie.hash[:root]&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def add_int(int)   # for int &gt;= 0&lt;br /&gt;      ia = int.to_s.scan(/[[:digit:]]/).map { |i| i.to_i }  # integer array; ex: [4,6,2]&lt;br /&gt;      ia.unshift(:root)&lt;br /&gt;      str = ""&lt;br /&gt;      ia.size.times { |x| str &lt;&lt; "[ia.at(#{x})]" }&lt;br /&gt;      str = "Trie.hash" &lt;&lt; str &lt;&lt; "[true]"&lt;br /&gt;      eval(str)&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def matchi(int)  # match integer&lt;br /&gt;      ia = int.to_s.scan(/[[:digit:]]/).map { |i| i.to_i }  &lt;br /&gt;      node = Trie.hash.fetch(:root,nil)&lt;br /&gt;      ia.each do |digit|&lt;br /&gt;         node = node.fetch(digit,nil)&lt;br /&gt;         return false unless node&lt;br /&gt;      end&lt;br /&gt;      node.fetch(true,nil) ? true : false&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def mfpi(int)   # match first part of integer&lt;br /&gt;      ia = int.to_s.scan(/[[:digit:]]/).map { |i| i.to_i }&lt;br /&gt;      node = Trie.hash.fetch(:root,nil)&lt;br /&gt;      ia.each do |digit|&lt;br /&gt;         node = node.fetch(digit,nil)&lt;br /&gt;         return false unless node&lt;br /&gt;      end&lt;br /&gt;      return true&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def &lt;&lt;(word)&lt;br /&gt;      ca = word.split(//u)    # UTF-8 aware character array&lt;br /&gt;      ca.unshift(:root)&lt;br /&gt;      #ca = [:root, *word.split(//u)]&lt;br /&gt;      #ca = [:root].concat(word.split(//u))&lt;br /&gt;      str = ""&lt;br /&gt;      ca.size.times { |x| str &lt;&lt; "[ca.at(#{x})]" }&lt;br /&gt;      str = "Trie.hash" &lt;&lt; str &lt;&lt; "[true]"&lt;br /&gt;      #p str     # example: "Trie.hash[ca.at(0)][ca.at(1)][ca.at(2)][ca.at(3)][true]"&lt;br /&gt;      eval(str)&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def match(word)&lt;br /&gt;      ca = word.split(//u)    &lt;br /&gt;      ca.unshift(:root)&lt;br /&gt;      #ca = [:root, *word.split(//u)]&lt;br /&gt;      #ca = [:root].concat(word.split(//u))&lt;br /&gt;      str = ""&lt;br /&gt;      ca.size.times { |x| str &lt;&lt; ".fetch(ca.at(#{x}),nil)" }&lt;br /&gt;      str = "Trie.hash" &lt;&lt; str &lt;&lt; ".fetch(true,nil)"&lt;br /&gt;      #p str   # example: "Trie.hash.fetch(ca.at(0),nil).fetch(ca.at(1),nil).fetch(ca.at(2),nil).fetch(true,nil)"&lt;br /&gt;      ret = eval(str) rescue nil&lt;br /&gt;&lt;br /&gt;=begin&lt;br /&gt;      # alternative&lt;br /&gt;      ca.size.times { |x| str &lt;&lt; ".fetch(ca.at(#{x}),{})" }&lt;br /&gt;      str = "Trie.hash" &lt;&lt; str &lt;&lt; ".fetch(true,nil)"&lt;br /&gt;      #p str   # example: "Trie.hash.fetch(ca.at(0),{}).fetch(ca.at(1),{}).fetch(ca.at(2),{}).fetch(true,nil)"&lt;br /&gt;      ret = eval(str)&lt;br /&gt;=end&lt;br /&gt;&lt;br /&gt;      ret == {} ? true : false   # {} is the default value created by Trie.hash or Hash.new_nested_hash respectively&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def match2(word)   # match entire word&lt;br /&gt;      ca = word.split(//u)    &lt;br /&gt;      node = Trie.hash.fetch(:root,nil)&lt;br /&gt;      ca.each do |char|&lt;br /&gt;         node = node.fetch(char,nil)&lt;br /&gt;         return false unless node&lt;br /&gt;      end&lt;br /&gt;      node.fetch(true,nil) ? true : false&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   def mfpw(word)   # match first part of word&lt;br /&gt;      ca = word.split(//u)    &lt;br /&gt;      node = Trie.hash.fetch(:root,nil)&lt;br /&gt;      ca.each do |char|&lt;br /&gt;         node = node.fetch(char,nil)&lt;br /&gt;         return false unless node&lt;br /&gt;      end&lt;br /&gt;      return true&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;trie = Trie.new&lt;br /&gt;trie &lt;&lt; "word"&lt;br /&gt;pp Trie.hash            &lt;br /&gt;p trie.match("word")      &lt;br /&gt;p trie.match("word2")   &lt;br /&gt;trie &lt;&lt; "word2"&lt;br /&gt;p trie.match("word2")   &lt;br /&gt;pp Trie.hash            # {:root=&gt;{"w"=&gt;{"o"=&gt;{"r"=&gt;{"d"=&gt;{true=&gt;{}, "2"=&gt;{true=&gt;{}}}}}}}}&lt;br /&gt;&lt;br /&gt;trie &lt;&lt; ""&lt;br /&gt;p trie.match("")&lt;br /&gt;pp Trie.hash&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;p trie.match2("word")      &lt;br /&gt;p trie.mfpw("wor")     # match first part of word&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;trie.add_int(8512)&lt;br /&gt;pp Trie.hash&lt;br /&gt;p trie.matchi(8512)&lt;br /&gt;p trie.matchi(85)&lt;br /&gt;p trie.mfpi(85)     # match first part of integer&lt;br /&gt;p trie.matchi(51)&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;pp Trie.hash&lt;br /&gt;paths = []&lt;br /&gt;Trie.hash.each_trie_path { |path, value| paths.push([ path ]) }&lt;br /&gt;#Trie.hash.each_trie_path { |path, value| paths.push([ path, value ]) }&lt;br /&gt;#pp paths&lt;br /&gt;puts&lt;br /&gt;paths.each { |x| p x }&lt;br /&gt;puts&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 07 Jun 2008 20:54:39 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5616</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>Pull Date-Effective Records that Overlap Each Other</title>
      <link>http://snippets.dzone.com/posts/show/5590</link>
      <description>Basic framework and examples of how to pull records that overlap each other from a temporal (aka date-effective) database.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;-- PK is a placeholder for the Primary Key column(s)&lt;br /&gt;-- SoftPK is a placeholder for columns that need to match for overlap, but are not the PK&lt;br /&gt;-- Sometimes SoftPK is the PK, in which case you remove the &lt;&gt; PK line and match the SoftPK.&lt;br /&gt;-- The idea is to check for overlap on all rows except for yourself, since that always overlaps.&lt;br /&gt;--   This snippet assumes the EndDate column has a NULL to represent infinity.&lt;br /&gt;--   There are alternate syntaxes for this (compare or EndDate is null) but I've found&lt;br /&gt;--   the Coalesce to provide the best query plan usually. The constant itself is debatable and&lt;br /&gt;--   implementation dependent.&lt;br /&gt;select outer.*&lt;br /&gt;from DateEffectiveTable as outer&lt;br /&gt;where exists (&lt;br /&gt;  select 1&lt;br /&gt;  from DateEffectiveTable as inner&lt;br /&gt;  where inner.PK &lt;&gt; outer.PK&lt;br /&gt;    -- and inner.SoftPK = outer.SoftPK&lt;br /&gt;    and inner.StartDate &lt;= coalesce(outer.EndDate, '9999-12-31')&lt;br /&gt;    and coalesce(inner.EndDate, '9999-12-31') &gt; outer.StartDate&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Example Usage&lt;br /&gt;-- Assume we have a table containing the address history for a person&lt;br /&gt;-- A person may have multiple addresses at once (own multiple houses).&lt;br /&gt;-- A person may move away then back (same address, different time ranges).&lt;br /&gt;-- ie, multiple simultaneous unique records are possible, but not&lt;br /&gt;-- multiple simultaneous non-unique records (no self-overlap).&lt;br /&gt;-- Yes, it is usually an odd design to have an AddressID, but go with it.&lt;br /&gt;select outer.*&lt;br /&gt;from AddressHistory as outer&lt;br /&gt;where exists (&lt;br /&gt;  select 1&lt;br /&gt;  from AddressHistory as inner&lt;br /&gt;  where outer.AddressID &lt;&gt; inner.AddressID&lt;br /&gt;    and outer.PersonID = inner.PersonID&lt;br /&gt;    and outer.Street = inner.Street&lt;br /&gt;    and outer.Zip = inner.Zip&lt;br /&gt;    and inner.StartDate &lt;= coalesce(outer.EndDate, '9999-12-31')&lt;br /&gt;    and coalesce(inner.EndDate, '9999-12-31') &gt; outer.StartDate&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- Same example, but assume PK is a more "appropriate" one of&lt;br /&gt;-- { PersonID, Street, Zip, StartDate }&lt;br /&gt;select outer.*&lt;br /&gt;from AddressHistory as outer&lt;br /&gt;where exists (&lt;br /&gt;  select 1&lt;br /&gt;  from AddressHistory as inner&lt;br /&gt;  where &lt;br /&gt;    not (&lt;br /&gt;     outer.PersonID = inner.PersonID&lt;br /&gt;     and outer.Street = inner.Street&lt;br /&gt;     and outer.Zip = inner.Zip&lt;br /&gt;     and outer.StartDate = inner.StartDate&lt;br /&gt;    )&lt;br /&gt;    and outer.PersonID = inner.PersonID&lt;br /&gt;    and outer.Street = inner.Street&lt;br /&gt;    and outer.Zip = inner.Zip&lt;br /&gt;    and inner.StartDate &lt;= coalesce(outer.EndDate, '9999-12-31')&lt;br /&gt;    and coalesce(inner.EndDate, '9999-12-31') &gt; outer.StartDate&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 04 Jun 2008 19:54:15 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5590</guid>
      <author>jokeyxero (xero)</author>
    </item>
    <item>
      <title>Pull Date-Effective Records that Intersect A Given Range</title>
      <link>http://snippets.dzone.com/posts/show/5503</link>
      <description>Basics of how to pull records that intersect a date range from a temporal (aka date-effective) database.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;-- @rangeStart is the start of the date range of interest&lt;br /&gt;-- @rangeEnd is the end of the date range of interest&lt;br /&gt;-- If you use null to signify infinity, then use the commented line instead of the one above it.&lt;br /&gt;select *&lt;br /&gt;from DateEffectiveTable&lt;br /&gt;where StartDate &lt; @rangeEnd&lt;br /&gt;  and EndDate &gt;= @rangeStart&lt;br /&gt;  -- and coalesce(endDate, '9999-12-31') &gt;= @rangeStart&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 16 May 2008 14:50:51 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5503</guid>
      <author>jokeyxero (xero)</author>
    </item>
    <item>
      <title>A simple test case using Ruby and XML - Part II</title>
      <link>http://snippets.dzone.com/posts/show/4624</link>
      <description>This code tests for the success of a single Class.  It reads in the test variables from an xml file and then performs a simple test. Refer to Part I (http://urltea.com/1p7h [dzone.com]) of the ruby code (testdata.rb), and Part III (http://urltea.com/1p7p [dzone.com])&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#file: test_feed.rb&lt;br /&gt;&lt;br /&gt;require 'testdata.rb'&lt;br /&gt;require 'feed.rb'&lt;br /&gt;&lt;br /&gt;include REXML&lt;br /&gt;&lt;br /&gt;class Test_feed &lt; Testdata&lt;br /&gt;&lt;br /&gt;  def initialize()&lt;br /&gt;&lt;br /&gt;    url = 'http://jamesrobertson.eu/test/feed/'&lt;br /&gt;    testfile = "testfile.xml"&lt;br /&gt;    load(url + testfile)&lt;br /&gt;&lt;br /&gt;    @in_filepath = get_input('filepath')&lt;br /&gt;    @in_project = get_input('project')&lt;br /&gt;    @in_date = get_input('date')&lt;br /&gt;    @out_filepath = get_output('filepath')&lt;br /&gt;    @out_file = get_output('file')&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def tested&lt;br /&gt;    feed = Feed.new&lt;br /&gt;    feed.create_file(@in_filepath, @in_project)&lt;br /&gt;    File.exist?(@out_filepath + @out_file)&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;#test &lt;br /&gt;#test_feed = Test_feed.new()&lt;br /&gt;#puts test_feed.tested&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 09 Oct 2007 09:55:48 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4624</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>A simple test case using Ruby and XML - Part I</title>
      <link>http://snippets.dzone.com/posts/show/4623</link>
      <description>Inspired by Gregg Pollack's, Ruby on Rails testing video http://tinyurl.com/ystb4o, this code reads an XML file containing test related variables, to use in an actual test case. Refer to parts II (http://urltea.com/1p7m [dzone.com]), and III (http://urltea.com/1p7p [dzone.com])&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#file: testdata.rb&lt;br /&gt;&lt;br /&gt;require 'net/http'&lt;br /&gt;require 'rexml/document'&lt;br /&gt;&lt;br /&gt;include REXML&lt;br /&gt;&lt;br /&gt;class Testdata&lt;br /&gt;&lt;br /&gt;  def initialize&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def load(url)&lt;br /&gt;    xml_data = Net::HTTP.get_response(URI.parse(url)).body&lt;br /&gt;    @doc = Document.new(xml_data)&lt;br /&gt;    true&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def get_input(name)&lt;br /&gt;    @doc.root.elements['test/inputs/input/' + name].text&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def get_output(name)&lt;br /&gt;    @doc.root.elements['test/outputs/output/' + name].text&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def tested?()&lt;br /&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def print(method, result)&lt;br /&gt;    puts "&lt;result method='#{method}'&gt;#{result}&lt;/result&gt;"&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def plan&lt;br /&gt;    @doc&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;#test &lt;br /&gt;#url = 'http://m.jamesrobertson.eu/test/testdata/'&lt;br /&gt;#testfile = "testfile.xml"&lt;br /&gt;&lt;br /&gt;#td = Testdata.new&lt;br /&gt;#td.load(url + testfile)&lt;br /&gt;#print('get_input', #td.get_input('input1').scan('instring').length &gt; 0)&lt;br /&gt;#print('get_output', td.get_output('output1').scan('outstring').length &gt; 0)&lt;br /&gt;&lt;br /&gt;#puts test_feed.tested?&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Tue, 09 Oct 2007 09:43:03 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4623</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Populate PostgreSQL tables</title>
      <link>http://snippets.dzone.com/posts/show/3749</link>
      <description>This script in PHP populate with demo data tables Postgresql.&lt;br /&gt;It insert serious registers automatically in a table.&lt;br /&gt;Remove the primary key before run.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;/** Rotina para popular tabela do PostgreSQL com massa de testes&lt;br /&gt;  * Colabora&#231;&#227;o de Ribamar FS - http://ribafs.net - 14/03/2007&lt;br /&gt;  * Requer remo&#231;&#227;o da chave prim&#225;ia antes da execu&#231;&#227;o.&lt;br /&gt;  */ &lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;Inserir Registros de Teste&lt;/title&gt;&lt;/head&gt;&lt;br /&gt;&lt;body bgcolor=''&gt;&lt;br /&gt;&lt;h2 align=center&gt;Cadastrar Tabela do PostgreSQL com Massa de Testes&lt;/h2&gt;&lt;br /&gt;&lt;h3 align=center&gt;&lt;font color=red&gt;Remova chave prim&#225;ia da tabela, antes de executar&lt;/font&gt;&lt;/h3&gt;&lt;br /&gt;&lt;h4 align=center&gt;Observe que nem todos os tipos de dados foram contemplados, alguns ficar&#227;o como string&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align=center&gt;&lt;br /&gt;&lt;form method='POST' name=frmIns action='popula_table_pg.php'&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Host&lt;/td&gt;&lt;td&gt;&lt;input type=text name='host' value='127.0.0.1'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Banco&lt;/td&gt;&lt;td&gt;&lt;input type=text name='banco' value='cliente'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Usu&#225;rio&lt;/td&gt;&lt;td&gt;&lt;input type=text name='usuario' value='postgres'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Senha&lt;/td&gt;&lt;td&gt;&lt;input type=text name='senha' value='postgres'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Tabela&lt;/td&gt;&lt;td&gt;&lt;input type=text name='tabela' value='clientes'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Registros&lt;/td&gt;&lt;td&gt;&lt;input type=text name='registros' value=5&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type=submit name='popular' value='Popular'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/form&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/body&gt;&lt;br /&gt;&lt;/html&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;if(isset($_POST['popular'])){&lt;br /&gt;	$host=$_POST['host'];&lt;br /&gt;	$banco=$_POST['banco'];&lt;br /&gt;	$usuario=$_POST['usuario'];&lt;br /&gt;	$senha=$_POST['senha'];&lt;br /&gt;	$tabela=$_POST['tabela'];&lt;br /&gt;	$registros=$_POST['registros'];&lt;br /&gt;&lt;br /&gt;	$conexao=pg_connect("host=$host user=$usuario password=$senha dbname=$banco port=5432");&lt;br /&gt;	if (!$conexao){&lt;br /&gt;		die('Erro ao conectar ao banco&lt;br&gt;'.pg_last_error($conexao));&lt;br /&gt;	}&lt;br /&gt;	$str="SELECT * FROM $tabela";&lt;br /&gt;	$consulta= pg_query($conexao,$str);&lt;br /&gt;	$nc=pg_num_fields($consulta);&lt;br /&gt;	$nr=pg_num_rows($consulta);&lt;br /&gt;&lt;br /&gt;   $n='';//numericos (int, tinyint, smallint, bigint, etc)&lt;br /&gt;   $r=''; //reais (float e double)&lt;br /&gt;   $s="'";//strings&lt;br /&gt;   $d=date('Y-m-d'); //datas&lt;br /&gt;   $dt=date('Y-m-d H:i:s');//datatimes&lt;br /&gt;   $o=''; //outros&lt;br /&gt;&lt;br /&gt;   	$inscod .="INSERT INTO $tabela (";&lt;br /&gt;   	for ($j = 0; $j &lt; $nc; $j++) {&lt;br /&gt;      $campo = pg_field_name($consulta, $j);&lt;br /&gt;		if ($j &lt; $nc-1)	$inscod .= "$campo,";&lt;br /&gt;     	else $inscod .= "$campo";&lt;br /&gt;	}&lt;br /&gt;	$inscod .= ")";	 &lt;br /&gt;    $inscod .= " VALUES (";&lt;br /&gt;&lt;br /&gt;   for ($j = 0; $j &lt; $nc; $j++) {   &lt;br /&gt;   $tam   = pg_field_size($consulta, $j);&lt;br /&gt;   if($tam == -1) $tam=20; //Caso queira limitar os campos ao m&#225;ximo de 20 posi&#231;es&lt;br /&gt;		if ($j &lt; $nc-1){ &lt;br /&gt;			switch (pg_field_type($consulta, $j)){&lt;br /&gt;				case 'int4':&lt;br /&gt;					$n=str_pad($n,$tam,'12345679890');&lt;br /&gt;					$inscod .= "$n,";&lt;br /&gt;					break;&lt;br /&gt;     			case 'float4':&lt;br /&gt;					$r=str_pad($r,$tam,'1234567890');&lt;br /&gt;					$inscod .= "$r,";&lt;br /&gt;					break;&lt;br /&gt;				case 'bpchar':&lt;br /&gt;				case 'varchar':&lt;br /&gt;					$s=str_pad($s,$tam,"abcdefghijklmnopqrstuvxyz");&lt;br /&gt;					$inscod .= "$s',";&lt;br /&gt;					break;&lt;br /&gt;				case 'date':&lt;br /&gt;		 		    $inscod .= "'$d',";&lt;br /&gt;					break;&lt;br /&gt;				case 'timestamp':&lt;br /&gt;					$inscod .= "'$dt',";&lt;br /&gt;					break;&lt;br /&gt;				case 'text':&lt;br /&gt;					$inscod .= "'$t'";&lt;br /&gt;					break;&lt;br /&gt;				default:&lt;br /&gt;					$o=str_pad($o,$tam,"abcdefghijklmnopqrstuvxyz");&lt;br /&gt;					$inscod .= "'$o',";&lt;br /&gt;					break;&lt;br /&gt;			}&lt;br /&gt;     	}else{&lt;br /&gt;     		switch (pg_field_type($consulta, $j)){&lt;br /&gt;				case 'int4':&lt;br /&gt;					$n=str_pad($n,$tam,'1234567890');&lt;br /&gt;					$inscod .= "$n";&lt;br /&gt;					break;&lt;br /&gt;     			case 'float4':&lt;br /&gt;					$r=str_pad($r,$tam,'1234567890');&lt;br /&gt;					$inscod .= "$r";&lt;br /&gt;					break;&lt;br /&gt;				case 'bpchar':&lt;br /&gt;				case 'varchar':&lt;br /&gt;					$s=str_pad($s,$tam,"abcdefghijklmnopqrstuvxyz");&lt;br /&gt;					$inscod .= "$s'";&lt;br /&gt;					break;&lt;br /&gt;				case 'date':&lt;br /&gt;					$inscod .= "'$d'";&lt;br /&gt;					break;&lt;br /&gt;				case 'timestamp':&lt;br /&gt;					$inscod .= "'$dt'";&lt;br /&gt;					break;&lt;br /&gt;				case 'text':&lt;br /&gt;					$inscod .= "'$t'";&lt;br /&gt;					break;&lt;br /&gt;				default:&lt;br /&gt;					$o=str_pad($o,$tam,"abcdefghijklmnopqrstuvxyz");&lt;br /&gt;					$inscod .= "'$o'";&lt;br /&gt;					break;&lt;br /&gt;     		}&lt;br /&gt;     	}&lt;br /&gt;     	&lt;br /&gt;	}&lt;br /&gt;    $inscod .=");";	&lt;br /&gt;	&lt;br /&gt;    for($r=1;$r&lt;=$registros;$r++){	   &lt;br /&gt;		//echo  $inscod;&lt;br /&gt;	   	if(!pg_query($conexao,$inscod)) die ("Erro na inclus&#227;&lt;br&gt;".pg_last_error($conexao));&lt;br /&gt;    }	   &lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 30 Mar 2007 15:06:16 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3749</guid>
      <author>ribafs (Ribamar FS)</author>
    </item>
    <item>
      <title>Populate MySQL tables</title>
      <link>http://snippets.dzone.com/posts/show/3748</link>
      <description>This script in PHP to populate with demo data tables MySQL.&lt;br /&gt;Remove the primary key before run.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;/** Rotina para popular tabela do MySQL com massa de testes&lt;br /&gt;  * Colabora&#231;&#227;o de Ribamar FS - http://ribafs.net - 14/03/2007&lt;br /&gt;  * Requer remo&#231;&#227;o da chave prim&#225;ria antes da execu&#231;&#227;o.&lt;br /&gt;  */ &lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;Inserir Registros de Teste&lt;/title&gt;&lt;/head&gt;&lt;br /&gt;&lt;body bgcolor=''&gt;&lt;br /&gt;&lt;h2 align=center&gt;Cadastrar Tabela do MySQL com Massa de Testes&lt;/h2&gt;&lt;br /&gt;&lt;h3 align=center&gt;&lt;font color=red&gt;Remova chave prim&#225;ia da tabela, antes de executar&lt;/font&gt;&lt;/h3&gt;&lt;br /&gt;&lt;h4 align=center&gt;Observe que nem todos os tipos de dados foram contemplados, alguns ficar&#227;o como string&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align=center&gt;&lt;br /&gt;&lt;form method='POST' name=frmIns action='popula_table.php'&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Host&lt;/td&gt;&lt;td&gt;&lt;input type=text name='host' value='127.0.0.1'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Banco&lt;/td&gt;&lt;td&gt;&lt;input type=text name='banco' value='cliente'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Usu&#225;io&lt;/td&gt;&lt;td&gt;&lt;input type=text name='usuario' value='root'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Senha&lt;/td&gt;&lt;td&gt;&lt;input type=text name='senha'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Tabela&lt;/td&gt;&lt;td&gt;&lt;input type=text name='tabela' value='clientes'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Registros&lt;/td&gt;&lt;td&gt;&lt;input type=text name='registros' value=5&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type=submit name='popular' value='Popular'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/form&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/body&gt;&lt;br /&gt;&lt;/html&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;if(isset($_POST['popular'])){&lt;br /&gt;	$host=$_POST['host'];&lt;br /&gt;	$banco=$_POST['banco'];&lt;br /&gt;	$usuario=$_POST['usuario'];&lt;br /&gt;	$senha=$_POST['senha'];&lt;br /&gt;	$tabela=$_POST['tabela'];&lt;br /&gt;	$registros=$_POST['registros'];&lt;br /&gt;	$numericos=$_POST['numericos'];&lt;br /&gt;&lt;br /&gt;	$conexao=mysql_connect($host,$usuario,$senha);&lt;br /&gt;	if ($conexao){&lt;br /&gt;		$sel=mysql_select_db($banco,$conexao);&lt;br /&gt;		if(!$sel) die('Erro ao selecionar o banco'.mysql_error());&lt;br /&gt;	}else{&lt;br /&gt;		die ('Erro ao conectar ao banco '.mysql_error());&lt;br /&gt;	}&lt;br /&gt;	$str="SELECT * FROM $tabela";&lt;br /&gt;	$consulta= mysql_query($str,$conexao);&lt;br /&gt;	$nc=mysql_num_fields($consulta);&lt;br /&gt;	$nr=mysql_num_rows($consulta);&lt;br /&gt;&lt;br /&gt;   $n='';//numericos (int, tinyint, smallint, bigint, etc)&lt;br /&gt;   $r=''; //reais (float e double)&lt;br /&gt;   $s="'";//strings&lt;br /&gt;   $d=date('Y-m-d'); //datas&lt;br /&gt;   $dt=date('Y-m-d H:i:s');//datatimes&lt;br /&gt;   $o=''; //outros&lt;br /&gt;&lt;br /&gt;   	$inscod .="INSERT INTO $tabela (";&lt;br /&gt;   	for ($j = 0; $j &lt; $nc; $j++) {&lt;br /&gt;      $campo = mysql_field_name($consulta, $j);&lt;br /&gt;		if ($j &lt; $nc-1)	$inscod .= "$campo,";&lt;br /&gt;     	else $inscod .= "$campo";&lt;br /&gt;	}&lt;br /&gt;	$inscod .= ")";	 &lt;br /&gt;    $inscod .= " VALUES (";&lt;br /&gt;&lt;br /&gt;   for ($j = 0; $j &lt; $nc; $j++) {   &lt;br /&gt;   $tam   = mysql_field_len($consulta, $j);&lt;br /&gt;   //if(($tam)&gt;20) $tam=20; //Caso queira limitar os campos ao m&#225;ximo de 20 posi&#231;&#245;es&lt;br /&gt;		if ($j &lt; $nc-1){ &lt;br /&gt;			switch (mysql_field_type($consulta, $j)){&lt;br /&gt;				case 'int':&lt;br /&gt;					$n=str_pad($n,$tam,'12345679890');&lt;br /&gt;					$inscod .= "$n,";&lt;br /&gt;					break;&lt;br /&gt;     			case 'real':&lt;br /&gt;					$r=str_pad($r,$tam,'1234567890');&lt;br /&gt;					$inscod .= "$r,";&lt;br /&gt;					break;&lt;br /&gt;				case 'string':&lt;br /&gt;					$s=str_pad($s,$tam,"abcdefghijklmnopqrstuvxyz");&lt;br /&gt;					$inscod .= "$s',";&lt;br /&gt;					break;&lt;br /&gt;				case 'date':&lt;br /&gt;		 		    $inscod .= "'$d',";&lt;br /&gt;					break;&lt;br /&gt;     			case 'datetime':&lt;br /&gt;				case 'timestamp':&lt;br /&gt;					$inscod .= "'$dt',";&lt;br /&gt;					break;&lt;br /&gt;				case 'blog':&lt;br /&gt;					$inscod .= "'$t'";&lt;br /&gt;					break;&lt;br /&gt;				default:&lt;br /&gt;					$o=str_pad($o,$tam,"abcdefghijklmnopqrstuvxyz");&lt;br /&gt;					$inscod .= "'$o',";&lt;br /&gt;					break;&lt;br /&gt;			}&lt;br /&gt;     	}else{&lt;br /&gt;     		switch (mysql_field_type($consulta, $j)){&lt;br /&gt;				case 'int':&lt;br /&gt;					$n=str_pad($n,$tam,'1234567890');&lt;br /&gt;					$inscod .= "$n";&lt;br /&gt;					break;&lt;br /&gt;     			case 'real':&lt;br /&gt;					$r=str_pad($r,$tam,'1234567890');&lt;br /&gt;					$inscod .= "$r";&lt;br /&gt;					break;&lt;br /&gt;     			case 'string':&lt;br /&gt;					$s=str_pad($s,$tam,"abcdefghijklmnopqrstuvxyz");&lt;br /&gt;					$inscod .= "$s'";&lt;br /&gt;					break;&lt;br /&gt;				case 'date':&lt;br /&gt;					$inscod .= "'$d'";&lt;br /&gt;					break;&lt;br /&gt;	     		case 'datetime':&lt;br /&gt;				case 'timestamp':&lt;br /&gt;					$inscod .= "'$dt'";&lt;br /&gt;					break;&lt;br /&gt;				case 'blog':&lt;br /&gt;					$inscod .= "'$t'";&lt;br /&gt;					break;&lt;br /&gt;				default:&lt;br /&gt;					$o=str_pad($o,$tam,"abcdefghijklmnopqrstuvxyz");&lt;br /&gt;					$inscod .= "'$o'";&lt;br /&gt;					break;&lt;br /&gt;     		}&lt;br /&gt;     	}&lt;br /&gt;     	&lt;br /&gt;	}&lt;br /&gt;    $inscod .=");";	&lt;br /&gt;	&lt;br /&gt;    for($r=1;$r&lt;=$registros;$r++){	   &lt;br /&gt;		//echo  $inscod;&lt;br /&gt;	   	if(!mysql_query($inscod,$conexao)) die ("Erro na inclus&#227;o".mysql_error());&lt;br /&gt;    }	   &lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 30 Mar 2007 15:01:41 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3748</guid>
      <author>ribafs (Ribamar FS)</author>
    </item>
    <item>
      <title>Persisting Application data using Hashtable and IsolatedStorage</title>
      <link>http://snippets.dzone.com/posts/show/2774</link>
      <description>// nice way to store application data and settings&lt;br /&gt;// copied from: http://www.dotnetspider.com/kb/Article344.aspx&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.IO.IsolatedStorage;&lt;br /&gt;using System.Runtime.Serialization;&lt;br /&gt;using System.Runtime.Serialization.Formatters.Binary;&lt;br /&gt;&lt;br /&gt;namespace CustomStorage&lt;br /&gt;{&lt;br /&gt;    [Serializable]&lt;br /&gt;    public class ApplicationStorage : Hashtable&lt;br /&gt;    {&lt;br /&gt;        // File name. Let us use the entry assembly name with .dat as the extension.&lt;br /&gt;        private string settingsFileName = &lt;br /&gt;                        System.Reflection.Assembly.GetEntryAssembly().GetName().Name + ".dat";&lt;br /&gt;    &lt;br /&gt;        // The default constructor.&lt;br /&gt;        public ApplicationStorage()&lt;br /&gt;        {&lt;br /&gt;            LoadData();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        // This constructor is required for deserializing our class from persistent storage.&lt;br /&gt;        protected ApplicationStorage (SerializationInfo info, StreamingContext context)&lt;br /&gt;            : base(info, context)&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        private void LoadData()&lt;br /&gt;        {&lt;br /&gt;            IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore( IsolatedStorageScope.User &lt;br /&gt;                        | IsolatedStorageScope.Assembly, null, null );&lt;br /&gt;            if ( isoStore.GetFileNames( settingsFileName ).Length == 0 )&lt;br /&gt;            {&lt;br /&gt;                // File not exists. Let us NOT try to DeSerialize it.&lt;br /&gt;                return;&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            // Read the stream from Isolated Storage.&lt;br /&gt;            Stream stream = new IsolatedStorageFileStream( settingsFileName, &lt;br /&gt;                        FileMode.OpenOrCreate, isoStore );&lt;br /&gt;            if ( stream != null )&lt;br /&gt;            {&lt;br /&gt;                try&lt;br /&gt;                {&lt;br /&gt;                    // DeSerialize the Hashtable from stream.&lt;br /&gt;                    IFormatter formatter = new BinaryFormatter();&lt;br /&gt;                    Hashtable appData = ( Hashtable ) formatter.Deserialize(stream);&lt;br /&gt;                    &lt;br /&gt;                    // Enumerate through the collection and load our base Hashtable.&lt;br /&gt;                    IDictionaryEnumerator enumerator = appData.GetEnumerator();&lt;br /&gt;                    while ( enumerator.MoveNext() )&lt;br /&gt;                    {&lt;br /&gt;                        this[enumerator.Key] = enumerator.Value;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                finally&lt;br /&gt;                {&lt;br /&gt;                    // We are done with it.&lt;br /&gt;                    stream.Close();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        public void ReLoad()&lt;br /&gt;        {&lt;br /&gt;            LoadData();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        // Saves the configuration data to the persistent storage.&lt;br /&gt;        public void Save()&lt;br /&gt;        {&lt;br /&gt;            // Open the stream from the IsolatedStorage.&lt;br /&gt;            IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore( IsolatedStorageScope.User &lt;br /&gt;                        | IsolatedStorageScope.Assembly, null, null );&lt;br /&gt;            Stream stream = new IsolatedStorageFileStream( settingsFileName, &lt;br /&gt;                        FileMode.Create, isoStore );&lt;br /&gt;        &lt;br /&gt;            if ( stream != null )&lt;br /&gt;            {&lt;br /&gt;                try&lt;br /&gt;                {&lt;br /&gt;                    // Serialize the Hashtable into the IsolatedStorage.&lt;br /&gt;                    IFormatter formatter = new BinaryFormatter();&lt;br /&gt;                    formatter.Serialize( stream, (Hashtable)this );&lt;br /&gt;                }&lt;br /&gt;                finally&lt;br /&gt;                {&lt;br /&gt;                    stream.Close();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;//sample usage&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;CustomStorage.ApplicationStorage storage = new CustomStorage.ApplicationStorage();&lt;br /&gt;&lt;br /&gt;storage["name"] = "john";&lt;br /&gt;storage["age"] = 23;&lt;br /&gt;storage["address"] = "#10, Vasant Nagar";&lt;br /&gt;&lt;br /&gt;storage.Save();&lt;br /&gt;&lt;br /&gt;string name = storage["name"].ToString();&lt;br /&gt;int age = int.parse(storage["age"].ToString());&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 03 Oct 2006 15:49:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2774</guid>
      <author>sdorzak (Slawek)</author>
    </item>
    <item>
      <title>makeSafe</title>
      <link>http://snippets.dzone.com/posts/show/2738</link>
      <description>Make data safe...among other things&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function makeSafe($variable) {&lt;br /&gt;	$variable = htmlentities($variable, ENT_QUOTES);&lt;br /&gt;  	&lt;br /&gt;	if (get_magic_quotes_gpc()) { &lt;br /&gt;		$variable = stripslashes($variable); &lt;br /&gt;	}&lt;br /&gt;  	&lt;br /&gt;	$variable = mysql_real_escape_string(trim($variable));&lt;br /&gt; 	$variable = strip_tags($variable);&lt;br /&gt;	$variable = str_replace("\r\n", "", $variable);&lt;br /&gt; 	&lt;br /&gt;	return $variable;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 30 Sep 2006 07:02:31 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2738</guid>
      <author>Shpigford (Josh)</author>
    </item>
    <item>
      <title>reverse linked list</title>
      <link>http://snippets.dzone.com/posts/show/2678</link>
      <description>Reverse Linked list by reversing links for each node or swapping the nodes at each end.&lt;br /&gt;</description>
      <pubDate>Sat, 23 Sep 2006 17:46:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2678</guid>
      <author>nevadalife (nevada)</author>
    </item>
  </channel>
</rss>
