1<!DOCTYPE html> <html><head><meta charset="utf-8"> <title>Amazon DynamoDB npm module for nodejs - AWSPilot</title> <meta content="chrome=1" http-equiv="X-UA-Compatible"> <meta content="width=device-width, initial-scale=1, maximum-scale=1" name="viewport"> <link type="text/css" rel="stylesheet" href="//fonts.googleapis.com/css?family=Raleway:400,100,200,300,500,600"> <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css" rel="stylesheet"> <link media="screen" href="/stylesheets/stylesheet.css" type="text/css" rel="stylesheet"> <link media="print" href="/stylesheets/print.css" type="text/css" rel="stylesheet"> <link href="/stylesheets/tree.css" type="text/css" rel="stylesheet"> <link href="/css/tabs.css" type="text/css" rel="stylesheet">
1<script src="/js/libs/ractive.min.js"></script>
1
1<script src="/js/libs/aws-sdk-2.442.0.min.js"></script>
1
1<script src="/js/libs/dynamodbjs.js"></script>
1
1<script src="/js/libs/jquery/2.1.3/jquery.min.js"></script>
1
1<script src="/js/tabs.js"></script>
1
1<script src="/js/libs/ace/1.2.6/ace.js"></script>
1
1<script src="/js/libs/ace/1.2.6/mode-javascript.js"></script>
1
1<script src="/js/libs/ace/1.2.6/mode-sql.js"></script>
1
1<script src="/js/libs/ace/1.2.6/mode-html.js"></script>
1
1<script src="/js/libs/ace/1.2.6/theme-twilight.js"></script>
1
1<script src="/js/libs/ace/1.2.6/theme-monokai.js"></script>
1
1<script src="/js/libs/ace/1.2.6/theme-textmate.js"></script>
1
1<script src="/js/libs/ace/1.2.6/theme-iplastic.js"></script>
1
1<script>
vendor: 126 bytes, lines 1-3
1 (function(h,o,t,j,a,r){ 2 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; 3 h._hjSettings={hjid:
32749845
vendor: 262 bytes, lines 3-8
3,hjsv:6}; 4 a=o.getElementsByTagName('head')[0]; 5 r=o.createElement('script');r.async=1; 6 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; 7 a.appendChild(r); 8 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
8</script>
8
8<script> //(function(A,s,a,y,e,r){ 9 //r=window.OpenReplay=[s,r,e,[y-1]]; 10 //s=document.createElement('script');s.src=a;s.async=!A; 11 //document.getElementsByTagName('head')[0].appendChild(s); 12 //r.start=function(v){r.push([0])}; 13 //r.stop=function(v){r.push([1])}; 14 //r.setUserID=function(id){r.push([2,id])}; 15 //r.setUserAnonymousID=function(id){r.push([3,id])}; 16 //r.setMetadata=function(k,v){r.push([4,k,v])}; 17 //r.event=function(k,p,i){r.push([5,k,p,i])}; 18 //r.issue=function(k,p){r.push([6,k,p])}; 19 //r.isActive=function(){return false}; 20 //r.getSessionToken=function(){}; 21 //})(0, "7sCA8hXprixgftfJMSIG", "//static.openreplay.com/latest/openreplay.js",1,29); 22 </script>
22</head> <body><header><h1><b>@awspilot</b>/dynamodb</h1> <div class="gh" style="position: absolute;top: 15px;right: 40px;"><a class="github-button" aria-label="Issue awspilot/dynamodb-oop on GitHub" data-show-count="true" data-icon="octicon-issue-opened" href="https://github.com/awspilot/dynamodb-oop/issues">Issue</a> <a class="github-button" aria-label="Star awspilot/dynamodb-oop on GitHub" data-show-count="true" data-icon="octicon-star" href="https://github.com/awspilot/dynamodb-oop">Star</a> <a class="github-button" aria-label="Fork awspilot/dynamodb-oop on GitHub" data-show-count="true" data-icon="octicon-repo-forked" href="https://github.com/awspilot/dynamodb-oop/fork">Fork</a></div> </header> <div id="content-wrapper"><aside id="sidebar"><ul class="tree"><li><input type="checkbox" id="awspilot" checked> <label class="tree_label sub" for="awspilot"><img src="/images/folder_flat.png"> @awspilot</label> <ul><li><input type="checkbox" id="dynamodb" checked> <label class="tree_label sub" for="dynamodb"><img src="/images/folder_flat.png"> dynamodb</label> <ul><li><span class="tree_label"><a href="/"><img src="/images/text.png"> README.md</a></span> </li><li><span class="tree_label"><a href="/pages/apidef/"><img src="/images/text.png"> API_REF.md</a></span> </li><li><span class="tree_label"><a href="/pages/sql/"><img src="/images/text.png"> SQL.md</a> <li><span class="tree_label"><a href="/pages/layer/"><img src="/images/text.png"> Layers.md</a> <li><span class="tree_label"><a href="/pages/changelog/"><img src="/images/text.png"> ChangeLog.md</a> <li><span class="tree_label"><a href="/pages/create-table/"><img src="/images/code.png"> create_table.js</a> <li><span class="tree_label"><a href="/pages/insert/"><img src="/images/code.png"> insert.js</a> <li><span class="tree_label"><a href="/pages/insert-or-update/"><img src="/images/code.png"> insert_or_update.js</a> <li><span class="tree_label"><a href="/pages/insert-or-replace/"><img src="/images/code.png"> insert_or_replace.js</a> <li><span class="tree_label"><a href="/pages/batch-insert/"><img src="/images/code.png"> batch_insert.js</a> <li><span class="tree_label"><a href="/pages/update/"><img src="/images/code.png"> update.js</a> <li><span class="tree_label"><a href="/pages/replace/"><img src="/images/code.png"> replace.js</a> <li><span class="tree_label"><a href="/pages/delete/"><img src="/images/code.png"> delete.js</a> <li><span class="tree_label"><a href="/pages/get/"><img src="/images/code.png"> get.js</a> <li><span class="tree_label"><a href="/pages/batch-get/"><img src="/images/code.png"> batch_get.js</a> <li><span class="tree_label"><a href="/pages/query/"><img src="/images/code.png"> query.js</a> <li><span class="tree_label"><a href="/pages/scan/"><img src="/images/code.png"> scan.js</a> <li><span class="tree_label"><a href="/pages/transaction/"><img src="/images/code.png"> transactions.js</a> <li><span class="tree_label"><a href="/pages/drop-index/"><img src="/images/code.png"> drop_index.js</a> <li><span class="tree_label"><a href="/pages/drop-table/"><img src="/images/code.png"> drop_table.js</a> <li><input type="checkbox" id="misc" checked> <label class="tree_label sub" for="misc"><img src="/images/folder_flat.png"> Misc</label> <ul><li><span class="tree_label"><a href="/pages/empty-strings/"><img src="/images/text.png"> empty_strings.md</a> <li><span class="tree_label"><a href="/pages/datatypes/"><img src="/images/text.png"> data_types.md</a> <li><span class="tree_label"><a href="/pages/deprecated/"><img src="/images/text.png"> deprecated.md</a> <li><span class="tree_label"><a href="/pages/test/"><img src="/images/text.png"> test.md</a><span></span></span></li></span></li></span></li></span></li></ul> </li><li><span class="tree_label"><a href="/pages/disqus/"><img src="/images/text.png"> Disqus.md</a></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></span></li></ul> </li><li> <input type="checkbox" id="dynamodbui" checked> <label class="tree_label sub" for="dynamodbui"><img src="/images/folder_flat.png"> dynamodb-ui</label> <ul><li><span class="tree_label"><a href="/pages/ui-readme/"><img src="/images/text.png"> README.md</a></span> </li><li><span class="tree_label"><a href="/pages/ui-demo/"><img src="/images/text.png"> DEMO.md</a></span></li></ul></li></ul></li></ul></aside> <section id="main-content"><div class="content"> 23 24<h1>2.0.2</h1>
25support for delete attribute in transaction() update() and insert_or_update()<br> 26console.warn every time schema is not provided and a describeTable is called ( 3.x.x will throw err instead of calling describeTable )<br> 27moved testing from Travis to Github Actions<br> 28fix describeTable()<br> 29fix ProvisionedThroughput in sql 'DESCRIBE TABLE tbl_name' ( updated @awspilot/dynamodb-sql-util)<br> 30fix 'DESCRIBE TABLE tbl_name' when AWS does not return BillingModeSummary<br> 31updated (dev)dependencies<br> 32 33 34<h1>2.0.0</h1> 35removed npm-shrinkwrap, was causing npm install to also install dev dependencies ( npm bug ?)<br> 36aws-sdk as peer dependency ( shrinks deply size for environments with embedded aws-sdk eg. Lambda )<br> 37experimental transactWrite support<br> 38 39<h1>1.5.1</h1> 40import only dynamodb from aws-sdk<br> 41 42<h1>1.5.0</h1> 43wrap around batchGetItem - .batch().table().get().get().read()<br> 44wrap around batchWriteItem - .batch().table().put().del().write()<br> 45 46<h1>1.4.0</h1> 47.batch().table().put().put().del().write() - wrap around batchWriteItem<br> 48updated dev dependencies for security reasons<br> 49 50<h1>1.3.0</h1> 511.3.0+ will follow SemVer (major.minor.patch) and increment "minor" for new features <br> 52JSON keys in SQL can now be keywords without the need of wrapping: eg. { "keyword": 1 } can now be just { keyword: 1 }<br> 53 54 55<h1>1.2.11</h1> 56SQL LIST and MAP support nested StringSet, NumberSet, BinarySet and Binary<br> 57SQL support insert/update BinarySet data type (BS) using Buffer.from( <STRING>, 'base64')<br> 58SQL support insert/update binary data type (B) using Buffer.from( <STRING>, 'base64')<br> 59 60<h1>1.2.10</h1> 61SQL support for CREATE TABLE<br> 62pass an Array as parameter to select eg. .select(['attr1','attr2'])<br> 63 64<h1>1.2.9</h1> 65SQL support for DROP TABLE<br> 66SQL support for DROP INDEX index_name ON tbl_name<br> 67updated SQL parser to support keywords in attribute names, table names and index names (eg: WHERE where = 5)<br> 68<h1>1.2.8</h1> 69 70<h1>1.2.7</h1> 71fixes a HUGE bug where float numbers may lose decimals in OOP .query(), SQL .query() do not have this bug<br> 72<h1>1.2.6</h1> 73schema() : new method to supply primary key definitions for tables to avoid unnecesary describeTable calls<br> 74 75 76<h1>1.2.5</h1> 77basic arithmetic operations can be used instead of String or Number, anywhere in SQL, <br> 78new function in SQL: uuid()<br> 79Eg.:<br> 80 UPDATE tbl SET width = 100 + 20 WHERE `hash` = 'foo' + 'bar' AND `range` = ... ;<br> 81 INSERT INTO tbl SET accountId = uuid('acct-############'), created_at = new Date().getTime()<br> 82 83<h1>1.2.4</h1> 84@awspilot/dynamodb can now replace empty strings with custom values and convert back to empty strings when fetching data. 85 86<h1>1.2.3</h1> 87You can now use Javascript Math object in SQL queries as well as basic arithmetic operations as parameters for Date and Math Object<br> 88 Eg.:<br> 89 UPDATE tbl SET x = Math.round( Math.random() * 1000 ) WHERE ... ;<br> 90 UPDATE tbl SET x = Math.round( new Date().getTime() / 1000 ) WHERE ... ;<br> 91 UPDATE tbl SET x = new Date( new Date().getTime() - 1000*60*60*24 ).toISOString() WHERE ... ;<br> 92 93<h1>1.2.2</h1> 94Support for SELECT without HAVING ( FilterExpression )<br> 95Eg.:<br> 96 SELECT attr1, attr2 FROM tbl WHERE partition_key = 'value';<br> 97 SELECT * FROM tbl WHERE partition_key = 'value' AND sort_key LIKE 'word%'; <br> 98 SELECT * FROM tbl WHERE partition_key = 'value' AND sort_key >= 5; <br> 99 SELECT * FROM tbl WHERE partition_key = 'value' AND sort_key BETWEEN 'aaa' AND 'zzz'; <br> 100 101<h1>1.2.1</h1> 102Basic support for SCAN sql statement<br> 103Eg.:<br> 104 SCAN attr1,attr2 FROM tbl 105 106 107<h1>1.1.7</h1> 108Support for javascript Date object in SQL queries<br> 109Eg.:<br> 110 UPDATE tbl SET updated_at = new Date().getTime() WHERE ... ;<br> 111 112 113</div> 114</section> </div>
114<script>$(function() { 115 116 117 118 119 $('.code').each(function() { 120 var $newid = 'ace-' + Math.random() 121 122 if ($(this).attr('id')) 123 $newid = $(this).attr('id') 124 125 $(this).attr('id', $newid) 126 if (! $(this).hasClass('wide') ) 127 $(this).height( $(this).height() + 24 ) 128 129 var $e = ace.edit($newid) 130 if ($(this).hasClass('bash')) { 131 132 } else if ($(this).hasClass('sql')) { 133 $e.getSession().setMode("ace/mode/sql") 134 } else if ($(this).hasClass('html')) { 135 $e.getSession().setMode("ace/mode/html") 136 } else { 137 $e.getSession().setMode("ace/mode/javascript") 138 } 139 140 if ($(this).hasClass('iplastic')) 141 $e.setTheme("ace/theme/iplastic") 142 else if ($(this).hasClass('textmate')) 143 $e.setTheme("ace/theme/textmate") 144 else 145 $e.setTheme("ace/theme/monokai") 146 147 if ($(this).hasClass('rw')) 148 $e.setReadOnly(false) 149 else 150 $e.setReadOnly(true) 151 152 $e.setShowPrintMargin(false) 153 $e.setOption("highlightActiveLine", false) 154 $e.setOption("showInvisibles", false) 155 $e.setOption("displayIndentGuides", false) 156 $e.getSession().setUseWorker(false) 157 }) 158 $('.btn-describe').on('click', function() { 159 if ($(this).hasClass('disabled')) 160 return; 161 describe_code(ace.edit($('.activeTab').attr('id')).getValue()) 162 }) 163 $('.btn-execute').on('click', function() { 164 if ($(this).hasClass('disabled')) 165 return; 166 execute_code(ace.edit($('.activeTab').attr('id')).getValue()) 167 }) 168});</script>
168
168<script> 169 170describe_code = function(code) { 171 var editor = ace.edit('result-out') 172 editor.setValue('') 173 setTimeout(function() { 174 175 (function(code) { 176 177 var fakedynamo = { 178 config: {dynamoDbCrc32: true,}, 179 describeTable: function( params ,callback) { 180 editor.setValue( editor.getValue() + "\n\tdescribeTable\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 181 callback(null, { 182 Table: { 183 KeySchema: [ 184 {AttributeName: 'partition_key', KeyType: 'HASH' }, 185 {AttributeName: 'sort_key', KeyType: 'RANGE' } 186 ] 187 } 188 }) 189 }, 190 191 createTable: function( params ,callback) { 192 editor.setValue(editor.getValue() + "\n\tcreateTable\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 193 }, 194 updateTable: function( params ,callback) { 195 editor.setValue(editor.getValue() + "\n\tupdateTable\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 196 }, 197 putItem: function( params ,callback) { 198 editor.setValue(editor.getValue() + "\n\tputItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 199 }, 200 updateItem: function( params ,callback) { 201 editor.setValue(editor.getValue() + "\n\tupdateItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 202 }, 203 batchWriteItem: function( params ,callback) { 204 editor.setValue(editor.getValue() + "\n\tbatchWriteItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 205 }, 206 deleteItem: function( params ,callback) { 207 editor.setValue(editor.getValue() + "\n\tdeleteItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 208 }, 209 getItem: function( params ,callback) { 210 editor.setValue(editor.getValue() + "\n\tgetItem\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 211 }, 212 query: function( params ,callback) { 213 editor.setValue(editor.getValue() + "\n\tquery\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 214 }, 215 scan: function( params ,callback) { 216 editor.setValue(editor.getValue() + "\n\tscan\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 217 }, 218 deleteTable: function( params ,callback) { 219 editor.setValue(editor.getValue() + "\n\tdeleteTable\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 220 }, 221 transactWriteItems: function( params ,callback) { 222 editor.setValue(editor.getValue() + "\n\ttransactWrite\n" + JSON.stringify(params, null, "\t" ).split("\n").map(function(l) { return "\t"+l}).join("\n"),-1) 223 }, 224 225 } 226 DynamoDB = new window['@awspilot/dynamodb'](fakedynamo) 227 var origainal_cl = console.log; 228 console.log = function() { 229 [].slice.apply(arguments).map(function(argument) { 230 editor.setValue(editor.getValue() + argument + ' ',-1) 231 }) 232 editor.setValue(editor.getValue() + "\n" ,-1) 233 } 234 eval(code) 235 236 })(code) 237 238 }, 500) 239 240} 241 242 243 244execute_code = function(code) { 245 var editor = ace.edit('result-out') 246 editor.setValue('') 247 setTimeout(function() { 248 ; 249 (function(code) { 250 251 var ddb = new window.AWS.DynamoDB({ endpoint: 'https://djaorxfotj9hr.cloudfront.net/v1/dynamodb', region: 'us-east-1', credentials: { accessKeyId: 'myKeyId', secretAccessKey: 'y'} }) 252 253 DynamoDB = new window['@awspilot/dynamodb'](ddb) 254 var origainal_cl = console.log; 255 console.log = function() { 256 [].slice.apply(arguments).map(function(argument) { 257 if (typeof argument === "object") 258 return editor.setValue(editor.getValue() + JSON.stringify(argument,null,"\t") + ' ',-1) 259 260 editor.setValue(editor.getValue() + argument + ' ',-1) 261 }) 262 editor.setValue(editor.getValue() + "\n" ,-1) 263 } 264 eval(code) 265 266 })(code) 267 268 }, 500) 269 270} 271 272 273// describe_code(ace.edit($('.activeTab').attr('id')).getValue())</script>
vendor: 58 bytes, line 273
273 <script src="https://www.googletagmanager.com/gtag/js?id=
273UA-119179002-1
vendor: 18 bytes, line 273
273" async></script>
273<script>
vendor: 138 bytes, lines 273-277
273window.dataLayer = window.dataLayer || []; 274 function gtag(){dataLayer.push(arguments);} 275 gtag('js', new Date()); 276 277 gtag('config', '
277UA-119179002-1
vendor: 3 bytes, line 277
277');
277</script>
277
277<script src="https://buttons.github.io/buttons.js" async defer></script>
277</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.