<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>60720</bug_id>
          
          <creation_ts>2011-05-12 13:22:52 -0700</creation_ts>
          <short_desc>IndexedDB index does not enforce uniqueness</short_desc>
          <delta_ts>2011-11-23 14:52:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Mark Pilgrim (Google)">pilgrim</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>fishd</cc>
    
    <cc>hans</cc>
    
    <cc>jsbell</cc>
    
    <cc>pilgrim</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>403102</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2011-05-12 13:22:52 -0700</bug_when>
    <thetext>Original test: http://mxr.mozilla.org/mozilla2.0/source/dom/indexedDB/test/test_indexes.html?force=1

This is an adaptation of part of a test in Mozilla&apos;s IndexedDB test suite. It creates an object store with one record, then creates a unique index on one of the keys, then attempts to add another record with a duplicate key (which should violate that unique index). Mozilla correctly throws a CONSTAINT_ERR, but WebKit does not throw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403103</commentid>
    <comment_count>1</comment_count>
      <attachid>93328</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2011-05-12 13:23:13 -0700</bug_when>
    <thetext>Created attachment 93328
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508429</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-11-23 14:52:19 -0800</bug_when>
    <thetext>The attached test is flawed - it&apos;s assuming that the index constraints are enforced synchronously during the add() operation and result in an exception being thrown. 

Per the spec, with the async API (which is what the test is using) the constraint is enforced asynchronously and the uniqueness constraint error is reported via the request object (i.e. the onerror handler will fire).

The test could be corrected with:

73d72
&lt;     evalAndExpectException(&quot;objectStore.add({ name: &apos;Bob&apos;, height: 62, weight: 170 }, &apos;237-23-7738&apos;);&quot;, &quot;IDBDatabaseException.CONSTRAINT_ERR&quot;);
75c74,76
&lt;     done();
---
&gt;     req = evalAndLog(&quot;req = objectStore.add({ name: &apos;Bob&apos;, height: 62, weight: 170 }, &apos;237-23-7738&apos;);&quot;, &quot;IDBDatabaseException.CONSTRAINT_ERR&quot;);
&gt;     req.onsuccess = unexpectedSuccessCallback;
&gt;     req.onerror = done;

... but WebKit already has a test for this: LayoutTests/storage/indexeddb/index-unique.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>93328</attachid>
            <date>2011-05-12 13:23:13 -0700</date>
            <delta_ts>2011-05-12 13:23:13 -0700</delta_ts>
            <desc>test case</desc>
            <filename>index-unique-constraint.html</filename>
            <type>text/html</type>
            <size>3043</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjwhLS0KICBvcmlnaW5hbCB0ZXN0OiBodHRwOi8vbXhyLm1vemlsbGEu
b3JnL21vemlsbGEyLjAvc291cmNlL2RvbS9pbmRleGVkREIvdGVzdC90ZXN0X2luZGV4ZXMuaHRt
bD9mb3JjZT0xCiAgbGljZW5zZSBvZiBvcmlnaW5hbCB0ZXN0OgogICAgIiBBbnkgY29weXJpZ2h0
IGlzIGRlZGljYXRlZCB0byB0aGUgUHVibGljIERvbWFpbi4KICAgICAgaHR0cDovL2NyZWF0aXZl
Y29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLyAiCi0tPgo8aHRtbD4KPGhlYWQ+Cjxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgo8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5Pgo8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CjxzY3JpcHQ+CgpkZXNj
cmlwdGlvbigiVGVzdCBJbmRleGVkREI6IGluZGV4IHdpdGggdW5pcXVlIGNvbnN0cmFpbnQiKTsK
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKCmZ1bmN0aW9uIHRlc3QoKQp7CiAgICBpbmRleGVkREIgPSBldmFs
QW5kTG9nKCJpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRl
eGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsiKTsKICAgIHNob3VsZEJlRmFsc2UoImluZGV4
ZWREQiA9PSBudWxsIik7CiAgICBJREJEYXRhYmFzZUV4Y2VwdGlvbiA9IGV2YWxBbmRMb2coIklE
QkRhdGFiYXNlRXhjZXB0aW9uID0gd2luZG93LklEQkRhdGFiYXNlRXhjZXB0aW9uIHx8IHdpbmRv
dy53ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbjsiKTsKICAgIHNob3VsZEJlRmFsc2UoIklEQkRh
dGFiYXNlRXhjZXB0aW9uID09IG51bGwiKTsKICAgIElEQlRyYW5zYWN0aW9uID0gZXZhbEFuZExv
ZygiSURCVHJhbnNhY3Rpb24gPSB3aW5kb3cuSURCVHJhbnNhY3Rpb24gfHwgd2luZG93LndlYmtp
dElEQlRyYW5zYWN0aW9uOyIpOwogICAgc2hvdWxkQmVGYWxzZSgiSURCVHJhbnNhY3Rpb24gPT0g
bnVsbCIpOwoKICAgIG5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgICBkZXNjcmlw
dGlvbiA9ICJNeSBUZXN0IERhdGFiYXNlIjsKICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRl
eGVkREIub3BlbihuYW1lLCBkZXNjcmlwdGlvbikiKTsKICAgIHJlcXVlc3Qub25zdWNjZXNzID0g
b3BlblN1Y2Nlc3M7CiAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFj
azsKfQoKZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQp7CiAgICBkZWJ1Zygib3BlblN1Y2Nlc3MoKToi
KTsKICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CgogICAg
b2JqZWN0U3RvcmVOYW1lID0gIlBlb3BsZSI7CgogICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInJl
cXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcxJykiKTsKICAgIHJlcXVlc3Qub25zdWNjZXNzID0gY3Jl
YXRlQW5kUG9wdWxhdGVPYmplY3RTdG9yZTsKICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOwp9CgpmdW5jdGlvbiBjcmVhdGVBbmRQb3B1bGF0ZU9iamVjdFN0b3Jl
KCkKewogICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKCiAgICBvYmplY3RTdG9yZSA9IGV2
YWxBbmRMb2coIm9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVO
YW1lKTsiKTsKCiAgICBkZWJ1ZygiRmlyc3QsIGFkZCBhbGwgb3VyIGRhdGEgdG8gdGhlIG9iamVj
dCBzdG9yZS4iKTsKICAgIG9iamVjdFN0b3JlRGF0YSA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3Jl
RGF0YSA9IHsga2V5OiAnMjM3LTIzLTc3MzInLCB2YWx1ZTogeyBuYW1lOiAnQm9iJywgaGVpZ2h0
OiA2MCwgd2VpZ2h0OiAxMjAgfSB9OyIpOwogICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInJlcXVl
c3QgPSBvYmplY3RTdG9yZS5hZGQob2JqZWN0U3RvcmVEYXRhLnZhbHVlLCBvYmplY3RTdG9yZURh
dGEua2V5KTsiKTsKICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OwogICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBjcmVhdGVBbmRUZXN0SW5kZXhlczsKfQoKZnVuY3Rp
b24gY3JlYXRlQW5kVGVzdEluZGV4ZXMoKQp7CiAgICBkZWJ1ZygiTm93IGNyZWF0ZSB0aGUgaW5k
ZXhlcy4iKTsKICAgIGluZGV4RGF0YSA9IGV2YWxBbmRMb2coImluZGV4RGF0YSA9IHsgbmFtZTog
J25hbWUnLCBrZXlQYXRoOiAnbmFtZScsIG9wdGlvbnM6IHsgdW5pcXVlOiB0cnVlIH0gfTsiKTsK
ICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KGluZGV4RGF0YS5uYW1lLCBp
bmRleERhdGEua2V5UGF0aCwgaW5kZXhEYXRhLm9wdGlvbnMpOyIpOwoKICAgIGRlYnVnKCJDaGVj
ayB0aGF0IHRoZSBuYW1lIGluZGV4IGVuZm9yY2VzIGl0cyB1bmlxdWUgY29uc3RyYWludC4iKTsK
ICAgIG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi50cmFuc2FjdGlv
bihvYmplY3RTdG9yZU5hbWUsIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpLm9iamVjdFN0b3Jl
KG9iamVjdFN0b3JlTmFtZSk7Iik7CiAgICBldmFsQW5kRXhwZWN0RXhjZXB0aW9uKCJvYmplY3RT
dG9yZS5hZGQoeyBuYW1lOiAnQm9iJywgaGVpZ2h0OiA2Miwgd2VpZ2h0OiAxNzAgfSwgJzIzNy0y
My03NzM4Jyk7IiwgIklEQkRhdGFiYXNlRXhjZXB0aW9uLkNPTlNUUkFJTlRfRVJSIik7CgogICAg
ZG9uZSgpOwp9Cgp2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKCnRlc3QoKTsKCjwvc2Ny
aXB0Pgo8L2JvZHk+CjwvaHRtbD4KCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>