{"_id":"jsrel","_rev":"138-ca83507798f0a912d6c2e0f47d0720b4","name":"jsrel","description":"JavaScript lightweight synchronous RDB","dist-tags":{"latest":"0.4.1"},"versions":{"0.0.0":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.0.0","repository":{"url":""},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":"~0.6.9"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.0.0","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"618828defc53b1a68b02d732880e21437bf38c45","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.0.0.tgz","integrity":"sha512-HBRY68zxkqA1KvsSIK/f6x6Axrhowho+z766cUY5CPtkoIgiP7AE9rhHeVaUUVxMnhCTuGL1x977AQM4bcSHKg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEaSB396JK5swjwiLxYQrhGSCDkyOUTDbKriwONeuFbAIhAIT/JTMvtL0Nxkl0Ysh5yyaSDRXZPjv3dP/5VUH4WXvq"}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.0.1":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.0.1","repository":{"url":""},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.0.1","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"e115c601c7021b486fef51edd735ec3363447853","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.0.1.tgz","integrity":"sha512-RKnpVEHDYJpTkB6iP66WpyheajZMRBLLFPcGGqOhJx8RiGHJ25msAqIKy6L2KmnELg0BwIxK2ywjfyttc//g2A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEIgjzhiX291pxRSYhUUxY4tzr8EHkQkTc8yS1g6RZz7AiEAn5vtBfD25MST5Px084RpWDqKZWQ90bXAiAryLtFcLyg="}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.0.2":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.0.2","repository":{"url":""},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.0.2","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"54033a41f954cb623fe7a611db88973f821a990f","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.0.2.tgz","integrity":"sha512-i/U9i1L5InWNmfBW3BVjPIVV88+ecdgw/+KeVpZNgLw+ZwQmHWKRvjw8z3e/LwgDL3FjVk+qBMfCa/jhz/K79g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgHA23aS5ZZ8wa7ddxjWUQuKhUkiculg3TkfwMd/aJ0QIgRVzy0G1Dz2+cQoUYkznmabegiWSCJS7ZePLdzHmkHiE="}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.0.3":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.0.3","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.0.3","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"a3053afd6b8f639fc8ae1374fce90c9fb20ab6a5","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.0.3.tgz","integrity":"sha512-RbmSPrDDpnn/BAL9wE8FQnGdek6qJcPBy2gbYYIJZwTuK871NIJfGSbZFNoGyNQZCE3kL5GAacepbC8Q+E/RrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRHH4Ml5Yceu3Rt/gHY7GRFZsZ9sAJGw/kB9Z20sZLlwIgf08WYag+1p8HcNFh7sF4+qsWi/DI1WCFXeNm+cuTNjI="}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.0.4":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.0.4","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.0.4","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"e9d6d5ee8f90cf2694eb6d8c64933911264b5605","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.0.4.tgz","integrity":"sha512-xt1VAGy7np0QetFOH8v/lTQgaVkTzCvIR8qIup1o7qyZHiWawjaRXVCJm1HCLNrJN2c3NaCo2wX+0nGNd4+jFg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA5UyWRvSkz6RrW1zOEE4NJSiIkhEbCHFbiP0cIro1v8AiEAo78GBAV9ZGeICjUAQQwpgc7vCTo4PDPL/AtslanXS0c="}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.0.5":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.0.5","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.0.5","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"6be9825402931d10824c3dabc80dca65efc8e00e","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.0.5.tgz","integrity":"sha512-W2ziKsSwYR2Jqx+4RPUlrljENg1oKMKOPdhzKBOcviRi2wrqtldeI4pgnNDLesZ9MMuuyHoHwfK9yMWcMWDjpg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuoGnDLrNkmY4gwEyT1nTSJZri1943Al8L58K3+vgfjQIhAKno1b44pD4qHJtAW7tZz2vUvDOq3Q8237U4iPtZ1MYF"}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.0.6":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.0.6","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.0.6","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"0c1838594e6653d80e44446db795f22292571c68","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.0.6.tgz","integrity":"sha512-UJR9tkmcCxkmQPxWtgMIzfGMHYNVhQ0wxy31va8HWpW7CBKfpbbzL62nPpL7/91rYwAs64EAIQhT4APciuYoJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYWPcCZfzKJ7FukCgcc2q0adIXW9kwQtcnFIWUVCQvZwIhAJIP+W20qqW//W7NSppko+HLcGyzScaTRq6A9Cs97UKq"}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.0.7":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.0.7","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.0.7","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"686a8d0eeba5599c8fa7ff3c618c225d50710a7c","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.0.7.tgz","integrity":"sha512-JGf0Fa3oVO9YjAlcK/NmmzkNVdbIGSdHOi5nTDleWlUsDS6IcVljRZgknY9Xfz/nloOSGBT6Ik19Ssnrl+BQEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGfQYKab9uDA8uWV8eB7YdKirx2e5uXn0nhEYkleE+kUAiEAhr2u16v5ISeINjG0QX+uP7sILk+V1FhI+WA0AdJ8J18="}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.0.8":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.0.8","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.0.8","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"53cb025742ec0ae833f53bc43dc9b4d6b91fb853","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.0.8.tgz","integrity":"sha512-YIf8s3WJisSp10xkW3F5doZLNTUwV71+6W1iZ76AcU5Z3iO6k4M0/Pg9jmIMhoMc10FkgNfujb+JL4+pcSG5cA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEuEq8Rl0KKMWff1zWrJ6Pnenm9WqjbxpI5cXKSKcqpFAiAfSkjevneZhgDkrpARqffsY1kTsPZLBG9sfihhOR3Wtw=="}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.0":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.0","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.1.0","_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"3a778896530324585bd33789d31702f0dbac8556","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.0.tgz","integrity":"sha512-Rh4x42JLB3SkkJNp7UWcGgXo1lq4e7zcbuROaOP0E9k14Sw27R1Mk8jrf5z2iiBpzDmm1Xe6BoAEcmvPqhDdOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCexjbCHcx9inTJanE++S1GRNPc/CVT4JYQc+s9fu+OxAIhANAxe1Z7imoXnZrJH9ncyqr07hfnWbCyrCoa2tRIGGS5"}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.3":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.3","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.1.3","_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"9888cd307e3f8a6c301734486acb94ba53a555f9","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.3.tgz","integrity":"sha512-tIcIpeGXoftSLal89Y5Ep3wmgsfEXVUSqbSaTRi6XrKRIEKs4781Y12BLBDkenf5RmjfyFkS4mgpBKRT7bp0fg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+GPyoBQ7cV7LgSKxoHTzhAJ8XBeL2I+eKWR+GO/HHfgIhAPdr1z4IyKWPkYIfZkX4lQZqfIAbcdwF/ZzClum9+J1T"}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.4":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.4","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.1.4","_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"984f9542c77947989b5e9adfef58883b2dda6473","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.4.tgz","integrity":"sha512-+zL6Wqh/DRBDFKp4rMEyh8OSR2lRwcicGgWpD7Q8bU7bzQI+gWsAgb/8GPzwc76g/kdqSPzkbkQQXL+EArPtLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNGSIzpttVjHy0lZpbM/5pziSluJ2T6iZR9fkndUGHowIgKPphOd5ADed8Mz6qutsoHu/98pG9qOXOxnfV1QJ2BM8="}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.5":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.5","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.1.5","_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"961b3bcd70d719303b5e3a773d44fbfc425aeebe","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.5.tgz","integrity":"sha512-ULo+Q98C9MI3gIo2oZQgBWktyUVKcfIC7Yg5TxdFTIldUtcyqUbuM/VoUBfhGBtYkTHQWW792n05SXXV3BUujw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAu3cGLcFHsWytzmZ6W910ejKCFPgFgnXPyhd28OS+OwIhAMn70w0ZBr6ScjDujqszMBZT85skvklhKDpbfhLP3/45"}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.6":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.6","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.1.6","_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"e37b2f743869cbbbd19778b3406d904535d1e5e1","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.6.tgz","integrity":"sha512-lGDNcNP2FHnqifzBY6JloWvmrCTj6KM/Ki6X1922zyjPbLwVTk3E1r7JUrtj8ZafgNJZPQ2H4lFiJkADfFY6FA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFpSAiT9j+cTKh9sANPmtWq3vNgnIiKERDCmdCRr/sSeAiAR53XctLuWRkpJrxJVoepkkylPlOqdBRFdigX1kzGZpw=="}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.7":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.7","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.1.7","_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"78fb81fab1f2e9d51023b33f511aece6763b9f34","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.7.tgz","integrity":"sha512-RA75KqxtG3Kz8Ztx662dvug93pbNNUXmfOJ01Qu8uNlufUz87vj3j9cDOVQOyaOm7rgD/x1mu7GypD5wK76anQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWQKRNhW+CgL+1+nNneq//leslzUiuEK1bIl/q2GoixgIhAOyO0hIEJVaxUmAwkt84l96eAavNH5EdAk3TiGeWgrD4"}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.9":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.9","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.1.9","_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"30bbec0083dc0835df18c3fa70d4360953754655","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.9.tgz","integrity":"sha512-lxgpaUtHk/rrKahcggd3A1272E7knGIuQFjHtyn1k5MGb+ZrnfJl5zXdo3Rvq2Kx4bX5GOENZx8EHq/XL6QLHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCs/SH1hxQ19LVCMBXOZOx/TVO3KBXYWGHHWh0MkDO77QIhAO4QntH7dQVAHXQCtuq0bKi1AXK2S0bE8mVAe66o5qtO"}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.10":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.10","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.1.10","_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"78271158062f99c6d72f664da49f34e37d0d3fe3","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.10.tgz","integrity":"sha512-Cl3AMETcVcSPrUZmkg4whn+/olZDL2XNBJ8+ZkgNfopkHlWNAN4/PFF+MMYTm4q5zTgV5djUtGj2BuuTwYIBQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+gl7DBitMhj5yOCsrSJJlxPEVpMyRddUoI+JUlj7IaAIgd8m5zx1A/rp2q/2Nf14RdMWLAmD//Kkd7Qlj4TaHr38="}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.12":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.12","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"_id":"jsrel@0.1.12","_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"d72a0ecc1397c5d3972594d1faa16a09ca38997c","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.12.tgz","integrity":"sha512-61Q2iAv2MG4U4keD1YLW//Fz7n7l6/sAoLYLqqfVRKS3CJfz5R2qZYvqZauY8oz0Cnie9nTxbSwC1tX/0W1yaw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH3mFJ++kXLBJjd91CLiYr+AvnK0n4GRxTA80BsOGIaQIhAJzcmv014M6uUXrpzzMQfWY1cAU4yUmmI3x8A+p8LFWZ"}]},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.13":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.13","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_id":"jsrel@0.1.13","dist":{"shasum":"0cc229e183f7ffe01359c072d9ec816a0f30fad7","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.13.tgz","integrity":"sha512-2eqxRSeEmnor/Sb2g72Urv/pCZxiyLoYmXuDdKKvEoBojwAS2ikMEpZMMezQtrtUUD+qNDaNz9+4rYc0fXphrg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7narLM0iQX1mNRD3UbbzDabdtezJvLKkOf36VOyNn3wIgeROpDmN1oHp8wmExxRps5IaqhyXdPf1SpzojbDgE8ss="}]},"_npmVersion":"1.1.69","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.14":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.14","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_id":"jsrel@0.1.14","dist":{"shasum":"4b99485d42203eec4b0665e7b2dadb5fd3b31938","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.14.tgz","integrity":"sha512-bpt/UL8ppMBY9iVCzLj1q9z8lVEZI14Vo8F5gQ4y2NtC5eHxgJyT4m2msGw5IiR2P8PdodhEYhARcXA+RqfYtQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFjvAMIH+wXIbCzjHluoDk8NSVbySAbeIKq7QLfs0Al/AiBq1QbxQJOgjI4Jnp2fMdobpEol/7NA2SQCqOehB1oqjQ=="}]},"_npmVersion":"1.1.69","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.1.15":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.1.15","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.2.8"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_id":"jsrel@0.1.15","dist":{"shasum":"2ffbefaba3077529d6d8419ab7b4134ff2c7bdb5","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.1.15.tgz","integrity":"sha512-nJIjWdBdJUIT4eJOVAx16wPHc7R6TFKfHIIZqxxyOUZoNsvY1T3OakC4J2LPc8QkC4TyFR+lUnsb2ipfn3Mwag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIWXVERl+tSLfw4iFTJ57JYiy0HnbZfeb9COyFA15ueAIgDGnYmH87bGrwqi51ePup+O5SG16Bl28SoORToZfZ0rc="}]},"_npmVersion":"1.1.69","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.2.0":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.2.0","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_id":"jsrel@0.2.0","dist":{"shasum":"763aeca9ea53a8083799be2adca8f465cac76a92","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.2.0.tgz","integrity":"sha512-4ETqyVdBuPfzpzBBVvJknsVQks96qZvF+wjtZDHi0qe4pjnm9thDqH/UrFxu2zowiTVNsrS9SOU1Xy5O12Pj1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSRsuj25P0pOQ/rJIYtt1FFXzCsft9kU9yBZi0ZSP1yAIgQt3syG7cqJcl5iloVsfelwwbAmZPiJh++IE+JWItCeA="}]},"_npmVersion":"1.1.69","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"directories":{}},"0.2.1":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.2.1","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_id":"jsrel@0.2.1","dist":{"shasum":"b58458c94b75e57fe6b00bf1be1c9ada279b2b2a","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.2.1.tgz","integrity":"sha512-DDUfAqx2A1zYfF1eWUzEPdM+TQIFZDnMynzhrcsPWFggOimHbVo6hMD+KUMQyNVfsq5n+Ad9K4GCUB9h9UG8gA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDoma2vTb8i/qLEiL9aibcFzFSvPWQC3JaM+z9DIp/O8AiAQFoRfNkfDF3EIl5bGG47oN4c2OJlSwRcSdBklSbLDWg=="}]},"_npmVersion":"1.1.69","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.2.2":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.2.2","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_id":"jsrel@0.2.2","dist":{"shasum":"41b07736304f95870b0a5349e4d6d01cf5ba456c","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.2.2.tgz","integrity":"sha512-iP/iPOarFuIPJHwFNVISJLjTyBap3SQBUUJHqQKIemlwFT8Mq1besRHJxYmLKkq7nqinRxtNBPWebIXfyAJw+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/djN9myyAOzFManmjFs+yE01JJV4Zz4+f/X9AECXEdAIhALsOghUZiAE8VN+CbX2L2cN7371+/doFletNqias8iVN"}]},"_npmVersion":"1.1.69","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.2.3":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.2.3","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_id":"jsrel@0.2.3","dist":{"shasum":"c1d873d7ae9af8d72697348ad4a00b41f7920fd3","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.2.3.tgz","integrity":"sha512-7NXd0KPhlf0q0lpbskayRJ/Zcv/o9xESlbzPIZDcEbjwdxuu0WKHiRfwG1dlENuFpETJ+k47tYpsyDpsgek+Tw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYin/z4U+v023uh+1ni9arZuu0Nb9dEQ3yYuS4oY7Z8AIgZwsLUMaAQvjffRUouYO0hQnm/pcTRQWXfLj7G0J/+eg="}]},"_npmVersion":"1.1.69","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.2.5":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.2.5","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_id":"jsrel@0.2.5","dist":{"shasum":"50778712e465645aa10567ef1cb5d590d075495d","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.2.5.tgz"},"_npmVersion":"1.1.69","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.2.4":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.2.4","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"_id":"jsrel@0.2.4","dist":{"shasum":"6ad4f4dfe7564b6ae3d10f599fddc069b4987dd9","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.2.4.tgz"},"_npmVersion":"1.1.69","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.3.2":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.3.2","repository":{"url":"git://github.com/shinout/jsrel"},"main":"jsrel.js","scripts":{"test":"vows test/*.js"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.3.2","dist":{"shasum":"e2a0017c1f6a940e06860ef0f9a5c736e5da5cf9","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.3.2.tgz"},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.3.3":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.3.3","repository":{"url":"git://github.com/shinout/jsrel"},"main":"lib/sqd.js","scripts":{"test":"vows test/*.js"},"bin":{"install-jsrel":"./bin/install-jsrel.sh"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2","grunt":"^0.4.4","grunt-contrib-coffee":"^0.10.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.3.3","dist":{"shasum":"8cc3f5286ed863250d4456d5ebbbf197a4b70cc1","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.3.3.tgz","integrity":"sha512-oVEzEaZc7CI/Irrrb1U87CFm6uFV4PRp5245u16/ng7zEZvbLVbbbvGxdKrb0vH53e/3uny5Bnv3kg0dFvB2Gw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKQlEuT7XNX1SD8QSLqlYAfZHXjKc2Nii/+T3j6NR96QIhAK/+Jz0eBF1GqjRNgeoiCUP/EZfYp9awWNsvp4Yfv0eB"}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.3.4":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.3.4","repository":{"url":"git://github.com/shinout/jsrel"},"main":"lib/sqd.js","scripts":{"test":"vows test/*.js"},"bin":{"install-jsrel":"./bin/install-jsrel.sh"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2","grunt":"^0.4.4","grunt-contrib-coffee":"^0.10.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.3.4","dist":{"shasum":"3ae3e85234a7f4af1a75f7a3e80b301fd5a36fcd","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.3.4.tgz","integrity":"sha512-ea6h+HqrHML4XlScqE570Q9o8djPs4hkd46LffjiOzIxfxWJpEltCe/drXynPJmjLvCo27PuHr0kYGN9tAIyAg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWIZ2fSkvPs4BcU0v3RZOPuvLFkhN2nVOBn/B0OMSIegIgbMHJ30FrGu1ILDsZT2D3vHQnbY8iVCOvvrw1CTgd8m0="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.3.5":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.3.5","repository":{"url":"git://github.com/shinout/jsrel"},"main":"lib/jsrel.js","scripts":{"test":"vows test/*.js"},"bin":{"install-jsrel":"./bin/install-jsrel.sh"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2","grunt":"^0.4.4","grunt-contrib-coffee":"^0.10.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.3.5","dist":{"shasum":"b1f13b24589b80bb0ae5525cb5dd8776113a9087","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.3.5.tgz","integrity":"sha512-T+E4MXJ+RkTC2EAGRXhj6b5EFgmcPLHwdcpOdb8txJatz/c4mUSUlE8RcXXTEazi0aPsP3oFfR5fb2275yuHVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDIw4ln9Nj5whTF5se31JwZYFOjFjJ//fJun9JvmVDpUAiAzZ9oJFrEtjnjLr5LAQw4lmuHcxw+20FY5f5gWk8/WHQ=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.3.6":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.3.6","repository":{"url":"git://github.com/shinout/jsrel"},"main":"lib/jsrel.js","scripts":{"test":"vows test/*.js"},"bin":{"install-jsrel":"./bin/install-jsrel.sh"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2","grunt":"^0.4.4","grunt-contrib-coffee":"^0.10.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.3.6","dist":{"shasum":"d060dd1d0e4973798cf9254750ce09d408c7f7c5","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.3.6.tgz","integrity":"sha512-FzZYS16Kbx26BhE67293dm/CxsArDtZWh8I33oPF9iS66fwYtmIn5XtYGHHCExdEaNiqrm/6WX4bsuT20Fk0pQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAww+9WtGIy+JAc3F4syCTvtgbuxKqNkWTGwDpkZVPYZAiEAt1iux08OFYpKyrESa2XpUn94xJ0Ckzd3F8+cXq3H7Ic="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.3.7":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.3.7","repository":{"url":"git://github.com/shinout/jsrel"},"main":"lib/jsrel.js","scripts":{"test":"vows test/*.js"},"bin":{"install-jsrel":"./bin/install-jsrel.sh"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2","grunt":"^0.4.4","grunt-contrib-coffee":"^0.10.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.3.7","dist":{"shasum":"7f9ed2fe12942fcb324b0a1867c1553ede728a14","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.3.7.tgz","integrity":"sha512-hszNLmo5C27vuxPC4mIR+S7L3SoysMa1cPaMaqutghlG9xbRkFZB2JLvAzrPfpwrYCIyRmf3hvaJQIYfVheN2Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAEpZNI7bro6LR0MF7o3cX9TqPR4Mox6CyBBY7AmfasFAiAeCEPux9T977uNLr/tr9Uq3FKAHZXYyqicWRRk36kODg=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.3.8":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.3.8","repository":{"url":"git://github.com/shinout/jsrel"},"main":"lib/jsrel.js","scripts":{"test":"vows test/*.js"},"bin":{"install-jsrel":"./bin/install-jsrel.sh"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2","grunt":"^0.4.4","grunt-contrib-coffee":"^0.10.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.3.8","dist":{"shasum":"b00141e2960d05513d3df9d421dcf715f8d699ea","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.3.8.tgz","integrity":"sha512-h/k1aZ9sMRib3gcHSifjAiUkrU5aPED69GQjasUtIpGUzA8g/n7+9qm9J3GLGVVFly/exV0gI0mNYapd9qWnLw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoum/2rqBDo4cPHiX218OhPERae6jewIOAy0S9tv32CAIhALteqH31/l1iWvhUcWADIoFwkJ5mkl2JwLiL4eA0u65q"}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.3.9":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.3.9","repository":{"url":"git://github.com/shinout/jsrel"},"main":"lib/jsrel.js","scripts":{"test":"vows test/*.js"},"bin":{"install-jsrel":"./bin/install-jsrel.sh"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2","grunt":"^0.4.4","grunt-contrib-coffee":"^0.10.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.3.9","dist":{"shasum":"3bc78e350dffd258240d21ab4b88de63989fa0d7","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.3.9.tgz","integrity":"sha512-ioJyEUZGLUsCZWMYWBGfpPhLYSKvmp00b/FyMdUWuIqxEX1nSlBX+VIqJO/hRmChWm4avqjJfMBcaS0XCRpahA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDf1IqLt8o3uUH0wqP86Y/9++2iMxSAviOEiI0JzT6rHAIhAJyWOoIft7iCoDgnRXeWCDB/T6Tj1qJUTtzMPSB+O+Em"}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.4.0":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.4.0","repository":{"url":"git://github.com/shinout/jsrel"},"main":"lib/jsrel.js","scripts":{"test":"vows test/*.js"},"bin":{"install-jsrel":"./bin/install-jsrel.sh"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2","grunt":"^0.4.4","grunt-contrib-coffee":"^0.10.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.4.0","dist":{"shasum":"36c22510d4894e4dfe39e18b41eb8ad205e1219c","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.4.0.tgz","integrity":"sha512-HMdCrT2K7OzBp5Ni0cvY7l0LX81Gu2agTNaMrvzB3FFIgpbRl5tPS8MAQ2vbVkzqJkkkNVuvjuIqzjaF1sLnqQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDX0BUH2DHiQvWe2FnULLVPMkj8gv+vjo9LXfAieW3eDAIgDG+zb8Y+lQqYX7XIAkNNZ6t20kYsOVR08mC2gtSAtOU="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]},"0.4.1":{"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"name":"jsrel","description":"JavaScript lightweight synchronous RDB","keywords":["database","DB","RDB","relation"],"version":"0.4.1","repository":{"url":"git://github.com/shinout/jsrel"},"main":"lib/jsrel.js","scripts":{"test":"vows test/*.js"},"bin":{"install-jsrel":"./bin/install-jsrel.sh"},"engines":{"node":">=0.6.1"},"dependencies":{"sortedlist":">=0.3.1"},"devDependencies":{"vows":">=0.6.2","linestream":">=0.3.2","grunt":"^0.4.4","grunt-contrib-coffee":"^0.10.1"},"optionalDependencies":{},"bugs":{"url":"https://github.com/shinout/jsrel/issues"},"homepage":"https://github.com/shinout/jsrel","_id":"jsrel@0.4.1","dist":{"shasum":"9cc2ab86fa8b3332e277bef171aece745dead79d","tarball":"https://registry.npmjs.org/jsrel/-/jsrel-0.4.1.tgz","integrity":"sha512-Kk/H04vySZIPdxa3iGeJlgEuqZFW8HfVOFl7CnUarBAUom1nUID1NKmabU1KuKf3WWdwQrHUYvyjrAUbCp96WA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFdOaBkeRx/ousuXRLvqLIVC04aiWmaF7dd15wMGKhRHAiEArcpKxDcem2Dgzi/Rlpt7odb58tEXJ5+18yxm3Gcmweo="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"shinout","email":"shinout310@gmail.com"},"maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}]}},"readme":"JSRel\n=========\n\ndescription\n------------\nJavaScript synchronous RDB (Relational database) without SQL\n\nAvailable in modern browsers, Node.js and Titanium(NEW!).\n\nThis **ISN'T** ORM, but SQL-less RDB implemented in JavaScript!\n\n\nGet it!\n----------\n```bash\n    $ npm install jsrel\n```\n\nor\n\n```bash\n    $ curl https://raw.github.com/shinout/jsrel/master/install-jsrel.sh | sh\n```\n\n\nAPI at a glance\n----------------\nFirst, define the schema\n\n```js\nvar JSRel = require(\"jsrel\");\nvar db = JSRel.create(\"dbname\", {schema: \n  { user: { name : true, is_activated: \"on\", $uniques: \"name\"},\n    book: { title: true, price: 1, author: \"user\", $indexes: \"title\" },\n}});\n```\n\nSecond, insert data\n\n```js\nif (!db.loaded) { // if loaded from saved data, omits this section\n  var u1 = db.ins('user', {name: 'shinout'});\n  var u2 = db.ins('user', {name: 'xxxxx', is_activated: false});\n  var b1 = db.ins('book', {title: 'how to jsrel', price: 10, author: u1});\n  var b2 = db.ins('book', {title: 'JSRel API doc', price: 20, author_id: u1.id});\n}\n```\n\nFind them!\n\n```js\nvar users = db.find('user', {is_activated: true});\n```\n\nGet one!\n\n```js\nvar shinout = db.one('user', {name: \"shinout\"});\n```\n\nGreater Than, Less Equal!\n\n```js\nvar booksGreaterThan5  = db.find('book', { price: {gt: 5} } );\nvar booksLessEqual15   = db.find('book', { price: {le: 15} } );\n```\n\nLike xxx%\n\n```js\nvar booksLikeJS = db.find('book', { title: {like$: \"JS\"} } );\n```\n\nJoin!\n\n```js\nvar usersJoinBooks = db.find('user', {is_activated: true}, {join: \"book\"});\n```\n\nOrderBy! Offset! Limit!\n\n```js\nvar users = db.find('user', null, {order: \"name\", limit : 10, offset : 3} );\n```\n\n\nPerpetuation\n\n```js\ndb.save();\n```\n\nExport / Import\n\n```js\nvar str = db.export();\n    var newDB = JSRel.import(\"newID\", str);\n```\n\ndump as SQL!\n\n```js\nvar sql = db.toSQL();\n```\n\nsuitable applications\n---------------------\n\n- rich client applications\n- tiny serverside applications\n- client caching\n- mock DB\n\nNOT suitable for applications which require scalability.\n\n\nmotivation\n-------------\nThinking about the separation of the Model layer.\n\nIf we connect to DB asynchronously, we must handle lots of callbacks in a model method.\n\n```js\nmodel.getUserBooks = function(name, callback) {\n  db.find(\"user\", {name: name}, function(err, users) {\n    db.find(\"book\", {user_id: users[0].id}, callback);\n  });\n};\n```\n\nIf we access to DB synchoronously, we can easily write human-readable model APIs.\n\n```js\nmodel.getUserBooks = function(name) {\n  var user  = db.find(\"user\", {name: \"xxyy\"})[0];\n  return db.find(\"book\", {user_id: user.id});\n};\n```\n\nAlso, synchoronous codes have an advantage of error handling.\n\n###for those who dislike Blocking APIs###\n\nWhy not making it standalone using WebWorker (browsers) or child_process.fork() (Node.js)?\nThen the whole calculation process doesn't affect the main event loop and we can get the result asynchronously.\n\nI prepared another JavaScript library for this purpose.\n\n[standalone](https://github.com/shinout/standalone).\n\nThen, we can access model methods like\n\n```js\nmodel.getUserBooks(\"user01\", function(err, result) {\n})\n```\n\nby defining\n\n```js\nmodel.getUserBooks = function(name) {\n  var user  = db.find(\"user\", {name: \"xxyy\"})[0];\n  if (!user) return [];\n  return db.find(\"book\", {user_id: user.id});\n};\n```\n\nThat is, try/catch and asynchronous APIs are automatically created via [standalone](https://github.com/shinout/standalone).\n\nSee **make it standalone** for detailed usage.\n\n\ninstallation\n-------------\n\n```bash\n    $ npm install jsrel\n```\n\nfor development in Titanium or web browsers,\n\n```bash\n    $ curl https://raw.github.com/shinout/jsrel/master/install-jsrel.sh | sh\n```\n\nin browsers, \n\n```html\n<script type=\"text/javascript\" src=\"/path/to/SortedList.js\"></script>\n<script type=\"text/javascript\" src=\"/path/to/jsrel.js\"></script>\n```\n\nin Node.js or Titanium,\n\n```js\nvar JSRel = require('jsrel');\n```\n\nis the way to load the library.\n\nIn browsers, the variable \"JSRel\" is set to global.\n\nIn Web Worker,\n\n```js\nimportScripts('/pathto/SortedList.js', '/pathto/jsrel.js');\n```\n\nSee also **make it standalone**.\n\ndependencies\n-------------\nJSRel internally uses **[SortedList](https://github.com/shinout/SortedList)**\nWhen installed with npm, it is automatically packed to node_modules/sortedlist\nOtherwise, it is recommended to run the following command to prepare jsrel and sortedlist.\n\n```bash\n    $ curl https://raw.github.com/shinout/jsrel/master/install-jsrel.sh | sh\n```\n\nIn Titanium, you have to set jsrel.js and SortedList.js at the top of Resources directory.\n\n\nJSRel API documentation\n-------------------------\n\n**JSRel**\n\n- JSRel.use(uniqId, options)\n- JSRel.create(uniqId, options)\n- JSRel.createIfNotExists(uniqId, options)\n- JSRel.import(uniqId, data_str, options)\n- JSRel.$import(uniqId, data_str, options)\n- JSRel.uniqIds\n- JSRel.isNode\n- JSRel.isBrowser\n- JSRel.isTitanium\n\n**instance of JSRel (jsrel)**\n\n- jsrel.table(tableName)\n- jsrel.save()\n- jsrel.export(noCompress)\n- jsrel.$export(noCompress)\n- jsrel.on(eventName, func, options)\n- jsrel.off(eventName, func)\n- jsrel.toSQL(options)\n- jsrel.origin()\n- jsrel.drop()\n- jsrel.id\n- jsrel.name\n- jsrel.tables\n- jsrel.schema\n- jsrel.loaded\n- jsrel.created\n\n\n**instance of JSRel Table (table)**\n\n- table.columns\n- table.ins(obj)\n- table.upd(obj, options)\n- table.find(query, options)\n- table.one(id)\n- table.one(query, options)\n- table.del(id)\n- table.del(query)\n\n\n**shortcut**\n\n- jsrel.ins(tableName, ...)\n- jsrel.upd(tableName, ...)\n- jsrel.find(tableName, ...)\n- jsrel.one(tableName, ...)\n- jsrel.del(tableName, ...)\n\n\n### JSRel.use(uniqId, options) ###\nCreates instance if not exist.\nGets previously created instance if already exists.\n\n**uniqId** is the identifier of the instance, used for storing the data to external system (file system, localStorage and so on).\n**options** is as follows.\n<table>\n<tr><th>key</th>\n<td>type</td>\n<td>required?</td>\n<td>description</td>\n<td>example</td></tr>\n\n<tr><th>storage</th>\n<td>string</td>\n<td>no</td>\n<td>type of external storages. oneof \"mock\", file\" \"local\" \"session\"<br>\nWhen running in Node.js or in Titanium, \"file\" is set by default.<br>\nuniqId is the path name to save the data to.\nWhen running in browsers, \"local\" is set by default.<br>\nlocal means \"localStorage\", session means \"sessionStorage\".\nWhen running in Web Worker, \"mock\" is set and no other options can be selected.  <br>\n\"mock\" saves nothing. This is limitation of Web Worker which cannot access to Web Storages.\nIn this case, exporting the data to the main thread, we can manually handle and store the data.<br>\n</td>\n<td>\"file\"</td>\n</tr>\n\n<tr><th>schema</th>\n<td>object</td>\n<td>required</td>\n<td>DB schema</td>\n<td>(see <strong>SCHEMA JSON</strong>)</td></tr>\n\n<tr><th>reset</th>\n<td>boolean</td>\n<td>no (default false)</td>\n<td>if true, reset db with the given schema.</td>\n<td>true</td></tr>\n\n<tr><th>name</th>\n<td>string</td>\n<td>no (default : the same as uniqId)</td>\n<td>the name of the db</td>\n<td>appname_test</td></tr>\n\n<tr><th>autosave</th>\n<td>boolean</td>\n<td>no (default false)</td>\n<td>whether to auto-saving or not</td>\n<td>true</td></tr>\n</table>\n\n#### SCHEMA JSON ####\n\n```js\n{\n  tableName1: tableDescription,\n  tableName2: { \n    columnName1 : columnDescription,\n    columnName2 : columnDescription\n  }\n}\n```\n\n**table description**\n\n<table>\n<tr><td>key</td>\n<td>type</td>\n<td>description</td>\n<td>example</td></tr>\n\n<tr><th>(columnName)</th>\n<td><strong>columnDescription</strong></td>\n<td>column to set.<br>\n<strong>name limitation</strong><br>\nCannot set [id, ins_at, upd_at] as they are already used by default.<br>\nCannot set [$indexes, $uniques, $classes] as they make conflict in schema description.<br>\nCannot set [str, num, bool, on, off] as they make conflict in column description.<br>\nCannot set [join, order, limit, offset, as, where, select, explain] as they make conflict in search options.<br>\nCannot include \",\" or \".\" as it is used in indexing or searching.<br>\nCannot set (RelatedTableName)_id as it is automatically set.<br>\n</td>\n<td>age: \"num\"</td>\n</tr>\n\n<tr><th>$indexes</th>\n<td>Array<Array></td>\n<td>list of indexes. child arrays are lists of columns to make an index.<br>\nIf string given, converted as array with the value<br>\n</td>\n<td>[[\"name\"], [\"firstName\", \"lastName\"]]</td></tr>\n\n<tr><th>$uniques</th>\n<td>Array<Array></td>\n<td>(the same as $indexes, but this means unique index)</td>\n<td>[[\"name\", \"pass\"]]</td></tr>\n\n<tr><th>$classes</th>\n<td>Array<Array></td>\n<td>(the same as $indexes, but this means classified index)</td>\n<td>\"type_num\"</td></tr>\n\n</table>\n\n**column description**\n<table>\n<tr><td>example</td>\n<td>description</td>\n\n<tr><th>{type: \"str\"}</th>\n<td>type is string.\ntype must be one of [\"str\", \"num\", \"bool\", (columnName)]\n</td></tr>\n\n<tr><th>{type: \"str\", required: false}</th>\n<td>type is string, and if not given, null is set.\nrequired option is false by default\n</td></tr>\n\n<tr><th>{type: \"bool\", _default: true}</th>\n<td>type is boolean, and if not given, true is set.</td></tr>\n\n<tr><th>{type: \"num\", required: true}</th>\n<td>type is number, and if not given, an exception is thrown.</td></tr>\n\n<tr><th>\"str\"</th>\n<td>type is string, and not required.</td></tr>\n\n<tr><th>\"num\"</th>\n<td>type is number, and not required.</td></tr>\n\n<tr><th>\"bool\"</th>\n<td>type is boolean, and not required.</td></tr>\n\n<tr><th>true</th>\n<td>type is string, and required.</td></tr>\n\n<tr><th>false</th>\n<td>type is string, and not required.</td></tr>\n\n<tr><th>1</th>\n<td>type is number, and required.</td></tr>\n\n<tr><th>0</th>\n<td>type is number, and not required.</td></tr>\n\n<tr><th>\"on\"</th>\n<td>type is boolean, and default value is true.</td></tr>\n\n<tr><th>\"off\"</th>\n<td>type is boolean, and default value is false.</td></tr>\n\n<tr><th>{type: tableName}</th>\n<td>type is the instance of a record in tableName.<br>\nthe column columnName_id is automatically created.<br>\nWe can set columnName_id instead of columnName in insertion and updating.<br>\nThis column is <strong>required</strong> unless you set required: false.\n</td></tr>\n\n<tr><th>{type: tableName, required: false}</th>\n<td>type is the instance of a record in tableName and not required.<br>\n</td></tr>\n\n<tr><th>tableName</th>\n<td>type is the instance of a record in tableName and <strong>required</strong>.<br>\n</td></tr>\n\n</table>\n\n### JSRel.create(uniqId, options) ###\nCreates instance if not exist, like **JSRel.use**.\nThrows an error if already exists, unlike **JSRel.use**.\nArguments are the same as JSRel.use except options.reset, which is invalid in JSRel.create()\n\n### JSRel.createIfNotExists(uniqId, options) ###\nCreates instance if not exist.\nGets previously created instance if already exists.\n**options** is optional when loading an existing database, and required when creating a new database.\nActually, this is the alias for JSRel.use(uniqId, options)\n\n### JSRel.import(uniqId, data_str, options) ###\nImports **data_str** and creates a new instance with **uniqId**.\n**data_str** must be a stringified JSON generated by **jsrel.export()**.\n\n\n<table>\n<tr><th>key</th>\n<td>type</td>\n<td>required?</td>\n<td>description</td>\n<td>example</td></tr>\n\n<tr><th>force</th>\n<td>boolean</td>\n<td>no (default : false)</td>\n<td> if true, overrides already-existing database of the same uniqId.\notherwise throws an error.</td>\n<td>true</td></tr>\n\n<tr><th>name</th>\n<td>string</td>\n<td>no</td>\n<td>the name of the db. If undefined, the imported name is used.</td>\n<td>appname_2</td></tr>\n\n<tr><th>autosave</th>\n<td>boolean</td>\n<td>no</td>\n<td>whether to auto-saving or not. If undefineed, the imported autosave preference is used.</td>\n<td>true</td></tr>\n\n<tr><th>storage</th>\n<td>string</td>\n<td>no</td>\n<td>type of external storages. see options of JSRel.use().\nIf undefined, the imported storage preference is used.\n</td>\n<td>\"file\"</td>\n</tr>\n</table>\n\nReturns instance of JSRel.\n\n### JSRel.$import(uniqId, data_str, options) ###\nAlias for JSRel.import().\nAs \"import\" is a reserved word in JavaScript, we first named this function \"$import\".\nHowever, CoffeeScript enables us to use reserved words, then we can also use **JSRel.import** as the alias.\n\n\n### JSRel.isNode ###\n(ReadOnly boolean) if Node.js, true.\n\n\n### JSRel.isBrowser ###\n(ReadOnly boolean) if the executing environment has \"localStorage\" and \"sessionStorage\" in global scope, true.\n\n\n### JSRel.isTitanium ###\n(ReadOnly boolean) if Titanium, true.\n\ninstanceof JSRel (shown as jsrel)\n------\n### jsrel.table(tableName) ###\nReturns a table object whose name is **tableName** (registered from the schema).\nIf absent, throws an exception.\n\n\n### jsrel.save() ###\nSaves current data to the storage.\nReturns **jsrel**\n\n### jsrel.export(noCompress) ###\n\nExports current data as the format above.\nReturns data.\nIf **noCompress** is given, it returns uncompressed data.\n\n### jsrel.$export(noCompress) ###\nAlias for jsrel.export() as \"export\" is a reserved word in JavaScript.\nIn CoffeeScript, jsrel.export() can be safely called.\n\n\n### jsrel.on(eventName, func, options) ###\n\nRegisters hook functions.\n**eventName** is the name of the event to bind the function **func**.\n\n#### events ####\n<table>\n<tr><th>event name</th>\n<td>emitted when</td>\n<td>arguments to be passed</td>\n</tr>\n<tr><th>ins</th>\n<td>data are inserted</td>\n<td>\n<ul>\n<li>**tableName** : table name\n<li>**insObj** : inserted object (with id)\n</ul>\n</td>\n</tr>\n\n<tr><th>ins:{tablename}</th>\n<td>data are inserted into {tablename}</td>\n<td>\n<ul>\n<li>**insObj** : inserted object (with id)\n</ul>\n</td>\n</tr>\n\n<tr><th>upd</th>\n<td>data are updated</td>\n<td>\n<ul>\n<li>**tableName** : table name\n<li>**updObj** : updated object\n<li>**oldObj** : object before updating\n<li>**updColumns** :updated columns (Array)\n</ul>\n</td>\n</tr>\n\n<tr><th>upd:{tablename}</th>\n<td>data are updated in {tablename}</td>\n<td>\n<ul>\n<li>**updObj** : updated object\n<li>**oldObj** : object before updating\n<li>**updColumns** :updated columns (Array)\n</ul>\n</td>\n</tr>\n\n<tr><th>del</th>\n<td>data are deleted</td>\n<td>\n<ul>\n<li>**tableName** : table name\n<li>**delObj** : deleted object\n</ul>\n</td>\n</tr>\n\n<tr><th>del:{tablename}</th>\n<td>data are deleted in {tablename}</td>\n<td>\n<ul>\n<li>**delObj** : deleted object\n</ul>\n</td>\n</tr>\n\n<tr><th>save:start</th>\n<td>at the start of jsrel.save()</td>\n<td>\n<ul>\n<li>**origin** : result of db.origin()\n</ul>\n</td>\n</tr>\n\n<tr><th>save:end</th>\n<td>at the end of jsrel.save()</td>\n<td>\n<ul>\n<li>**data** : saved data\n</ul>\n</td>\n</tr>\n\n</table>\n\n\n#### options ####\n<table>\n<tr><th>option name</th>\n<td>type</td>\n<td>description</td>\n<td>default</td>\n</tr>\n<tr><th>unshift</th>\n<td>boolean</td>\n<td>registers a function to the top of the list</td>\n<td>false</td>\n</tr>\n</table>\n\n\n\n### jsrel.off(eventName, func) ###\nUnregister hook functions registered in **eventName**.\nIf a function **func** is registered in **eventName** hooks, it is removed.\nIf **func** is null, all functions registered in **eventName** is removed.\n\n\n\n### jsrel.toSQL(options) ###\nGets SQL string from the current schema and data.\n\n**options**\n\n<table>\n<tr><th>option name</th>\n<td>type</td>\n<td>description</td>\n<td>default</td>\n<td>example</td></tr>\n\n<tr><th>noschema</th>\n<td>boolean</td>\n<td>if true, schema SQLs (create statements) are not generated.</td>\n<td>null</td>\n<td>true</td>\n</tr>\n\n<tr><th>db</th>\n<td>boolean or string</td>\n<td>if true, create database whose name is id of the db, if string given, the value is set as database's name.\nif not set, database creation (CREATE DATABASE xxxx) does not occur.\n<td>null</td>\n<td>true</td>\n</tr>\n\n<tr><th>nodrop</th>\n<td>boolean</td>\n<td>if true, drop statements are not generated.</td>\n<td>null</td>\n<td>true</td>\n</tr>\n\n<tr><th>nodata</th>\n<td>boolean</td>\n<td>if true, data SQLs (insert statements) are not generated.</td>\n<td>null</td>\n<td>true</td>\n</tr>\n\n<tr><th>type</th>\n<td>string</td>\n<td>type of RDBs. Currently, \"mysql\" is only tested.</td>\n<td>\"mysql\"</td>\n<td>\"mysql\"</td>\n</tr>\n\n<tr><th>engine</th>\n<td>string</td>\n<td>MySQL engine (only enabled when options.type is \"mysql\")</td>\n<td>\"InnoDB\"</td>\n<td>\"MyISAM\"</td>\n</tr>\n\n<tr><th>rails (unstable)</th>\n<td>boolean</td>\n<td>if true, rails-like date format (created_at, inserted_at) is output.</td>\n<td>null</td>\n<td>true</td>\n</tr>\n\n</table>\n\n\n### jsrel.origin() ###\nGets the last savedata.\n\nUnless jsrel.save() has been called at least once, null is returned.\n\n```js\n  var savedata = jsrel.origin();\n  var newdb = JSRel.import(\"new_db\", savedata);\n```\n\n\n### jsrel.drop(tableName1, tableName2, ...) ###\nDrops given tables.\nIf dependencies exist, jsrel follows the following rules.\n\n1. throw an error if the given table group contains another reference table\n2. set all the ids of referred columns to null\n\n### jsrel.id ###\n(ReadOnly) gets id\n\n\n### jsrel.name ###\n(ReadOnly) gets name\n\n\n### jsrel.tables ###\n(ReadOnly) gets list of registered tables\n\n\n```js\n[table1, table2, ...]\n```\n\n\n### jsrel.schema ###\n(ReadOnly) gets a canonical schema of the database, the same format as schema passed to JSRel.use\n\nBe careful that this property is dynamically created for every access.\n\n```js\nvar schema = db.schema; // created dynamically\nvar schema2 = db.schema; // created dynamically\nschema  ===  schema2 // false, but deeply equal\n\nvar db2 = JSRel.use(\"db2\", {schema: schema});  // the same structure as db\n```\n\n### jsrel.loaded ###\n(ReadOnly) boolean: true if loaded or imported from stored data, false otherwise.\n\n```js\ndb = JSRel.use(\"/path/to/file\", {schema: {tbl1: {name:true}, tbl2: {n: 1}}});\n\n// if not loaded, then inputs initialized data\nif (!db.loaded) {\n  db.ins(\"tbl1\", {name: \"shinout\"});\n  db.ins(\"tbl1\", {name: \"nishiko\"});\n  db.ins(\"tbl2\", {n: 37});\n  db.ins(\"tbl2\", {n: -21});\n}\n```\n### jsrel.created ###\n(ReadOnly) boolean: true if created, false otherwise.\n\njsrel.created === !jsrel.loaded\n\n```js\ndb = JSRel.use(\"/path/to/file\", {schema: {tbl1: {name:true}, tbl2: {n: 1}}});\n\n// if created, then inputs initialized data\nif (db.created) {\n  db.ins(\"tbl1\", {name: \"shinout\"});\n  db.ins(\"tbl1\", {name: \"nishiko\"});\n  db.ins(\"tbl2\", {n: 37});\n  db.ins(\"tbl2\", {n: -21});\n}\n```\n\n\n\n\n\ninstanceof JSRel.Table (shown as table)\n------\n### table.columns ###\n(ReadOnly) gets registered columns in the table\n\n    [column1, column2, ...]\n\n### table.ins(obj) ###\nRegisters a new record.\n**obj** must be compatible with columns of the table.\nOtherwise it throws an exception.\nReturns an instance of the record.\nIt is NOT the same as the given argument, as the new object contains \"id\".\n\nBefore insertion, Type checking is performed.\nJSRel tries to cast the data.\n\n\n#### record object ####\nRecord objects have all columns registered in the table.\n\nIn addition, they have **id**, **ins_at**, **upd_at** in their key.\nThese are all automatically set.\n\n**ins_at** and **upd_at** are timestamp values and cannot be inserted.\n\n**id** is auto-incremented unique integer.\n\nWe can specify **id** in insertion.\n    \n```js\ntable.ins({id: 11, name: \"iPhone\"});\n```\n\nWhen the table already has the same id, an exception is thrown.\n\n\n#### relation handling in insertion ####\nOK, let's think upon the following schema.\n\n```js\nvar schema = { user: {\n    nickName : true,\n    fitstName: false,\n    lastName : false\n  },\n  card: {\n    title : true,\n    body  : true\n  },\n  user_card {\n    user: \"user\",\n    card: \"card\",\n    owner: {type : \"user\", required: false}\n    $uniques: { user_card: [\"user\", \"card\"] }\n  }\n}\n```\n\nFirst, inserts users and cards.\n    \n```js\nvar jsrel = JSRel.use('sample', {schema: schema});\n    \nvar uTable = jsrel.table('user');\nvar shinout = uTable.ins({nickName: \"shinout\"});\nvar nishiko = uTable.ins({nickName: \"nishiko\"});\nvar cTable = jsrel.table('card');\nvar rabbit = uTable.ins({title: \"rabbit\", body: \"It jumps!\"});\nvar pot    = uTable.ins({title: \"pot\", body: \"a tiny yellow magic pot\"});\n```\n\n\nThen, inserts these relations.\n\n```js\nvar ucTable = jsrel.table('user_card');\nucTable.ins({ user: shinout, card: rabbit });\n```\n\n\nWe can also insert these relation like\n\n```js\nucTable.ins({ user_id: nishiko.id, card_id: pot.id });\nucTable.ins({ user_id: 1, card_id: 2 }); // 1: shinout, 2: pot\n```\n\nRemember that user_id and card_id are automatically generated and it represent the id column of each instance.\nWhen we pass an invalid id to these columns, an exception is thrown.\n\n```js\nucTable.ins({ user_id: 1, card_id: 5 }); // 1: shinout, 5: undefined!\n```\n\nWhen a relation column is not required, we can pass null.\n\n```js\nucTable.ins({ user: nishiko, card_id: 1, owner_id: null });\n```\n\nWhen duplicated, **xxxx_id priors to xxxx** (where xxxx is the name of the original column).\n\n```js\nucTable.ins({ user: nishiko, user_id: 1, card_id: 1 }); // user_id => 1\n```\n\n#### inserting relations ####\n\n```js\nobj.rel_table = [relObj1, relObj2, ...];\ntable.ins(obj);\n```\nrelObj1, relObj2 are also inserted to table \"rel_table\" containing the new id as the external key.\n\nIf the main table is related to the **rel_table** multiply,\nyou must specify the column like\n\n```js\nobj[\"rel_table.relcolumn\"] = [relObj1, relObj2, ...];\ntable.ins(obj);\n```\n\n\n### table.upd(obj, options) ###\nUpdates an existing record.\n**obj** must contains **id** key.\nOnly the valid keys (compatible with columns) in **obj** is updated.\nThrows **no** exceptions when you passes invalid keys.\nThrows an exception when you an invalid value with a valid key.\n\nReturns an instance of the updated record.\nIt is NOT the same as the given argument.\n\n#### relation updates ####\n\n\nupdating related tables\n```js\nobj.rel = {id: 3 }\nobj.rel_id = 1\n// in this case, relObj is prior to rel_id\ntable.upd(obj, {append: append});\n\nvar rel_id = table.one(obj, {id: obj.id}, {select: \"rel_id\"}); // 3. not 1\n```\n\n\n```js\nobj.rel_table = [relObj1, relObj2, ...];\ntable.upd(obj, {append: append});\n```\n\nif **relObj** contains \"id\" column, updating the object.\nOtherwise, inserting the object.\nIf **options.append** is false or not given, already existing related objects are deleted.\n\nIf the main table is related to the **rel_table** multiply,\nyou must specify the column like\n\n```js\nobj[\"rel_table.relcolumn\"] = [relObj1, relObj2, ...];\ntable.upd(obj, {append: append});\n```\n\n\n### table.find(query, options) ###\nSelects records.\nReturns a list of records.\n**query** is an object to describe how to fetch records.\n\n\n#### query examples ####\n<table>\n<tr><td>example</td>\n<td>description</td>\n\n<tr><th>{name: \"shinout\"}</th>\n<td>name must be equal to \"shinout\"</td></tr>\n\n<tr><th>{name: [\"shinout\", \"nishiko\"]}</th>\n<td>name must be equal to \"shinout\" or \"nishiko\"</td></tr>\n\n<tr><th>{name: {like$: \"shin\"}}</th>\n<td>name must be like \"shin%\"</td></tr>\n\n<tr><th>{name: {$like: \"inout\"}}</th>\n<td>name must be like \"%inout\"</td></tr>\n\n<tr><th>{name: [{$like: \"inout\"}, {equal: \"nishiko\"}] }</th>\n<td>name must be like \"%inout\" OR equals \"nishiko\"</td></tr>\n\n<tr><th>{name: {$like: \"inout\", equal: \"nishiko\"} }</th>\n<td>name must be like \"%inout\" AND equals \"nishiko\"</td></tr>\n\n<tr><th>{age: {gt: 24} }</th>\n<td>age must be greater than 24</td></tr>\n\n<tr><th>{age: {gt: 24, le: 40} }</th>\n<td>age must be greater than 24 and less equal 40</td></tr>\n\n<tr><th>{age: [{ge: 24}, {lt: 40}] }</th>\n<td>age must be greater equal 24 or less than 40</td></tr>\n\n<tr><th>{country: {$in: [\"Japan\", \"Korea\"] }</th>\n<td>country must be one of \"Japan\", \"Korea\" (as \"in\" is a reserved word in JavaScript, used \"$in\" instead.)</td></tr>\n\n<tr><th>{name: \"shinout\", age : {ge: 70 }</th>\n<td>must returns empty until shinout becomes 70</td></tr>\n\n</table>\n\n\n**options** is as follows.\n\n<table>\n<tr><th>key</th>\n<td>type</td>\n<td>description</td>\n<td>example</td></tr>\n\n<tr><th>order</th>\n<td>mixed</td>\n<td>see <strong>order description</strong></td>\n<td>{ name: \"asc\" }</td>\n</tr>\n\n<tr><th>limit</th>\n<td>int</td>\n<td>the end position of the data</td>\n<td>20</td></tr>\n\n<tr><th>offset</th>\n<td>int</td>\n<td>offset of the results</td>\n<td>10</td></tr>\n\n<tr><th>join</th>\n<td>mixed</td>\n<td>see <strong>join description</strong></td>\n<td>{records.scene: {title : {like$: \"ABC\"} }</td></tr>\n\n<tr><th>select</th>\n<td>string (one of column names)</td>\n<td>get list of selected columns instead of objects</td>\n<td>\"title\"</td></tr>\n\n<tr><th>select</th>\n<td>array (list of column names)</td>\n<td>get list of object which contains the given columns instead of all columns</td>\n<td>[\"name\", \"age\"]</td></tr>\n\n<tr><th>explain</th>\n<td>object</td>\n<td>put searching information to the given object</td>\n<td>{}</td></tr>\n\n</table>\n\n#### order description ####\n<table>\n<tr><td>example</td>\n<td>description</td>\n\n<tr><th>\"age\"</th>\n<td>order by age asc</td></tr>\n\n<tr><th>{age: \"desc\"}</th>\n<td>order by age desc</td></tr>\n\n<tr><th>{age: \"desc\", name: \"asc\"}</th>\n<td>order by age desc, name asc</td></tr>\n</table>\n\n\n#### results ####\nReturns list of instances\n\n```js\n[ {id: 1, name: \"shinout\"}, {id: 2, name: \"nishiko\"}, ...]\n```\n\n#### join description ####\nsample data\n\n<p>group</p>\n<table>\n<tr><td>id</td><td>name</td></tr>\n<tr><td>1</td><td>mindia</td></tr>\n<tr><td>2</td><td>ZZZ</td></tr>\n</table>\n\n<p>user</p>\n<table>\n<tr><td>id</td><td>name</td><td>age</td><td>group</td></tr>\n<tr><td>1</td><td>shinout</td><td>25</td><td>1</td></tr>\n<tr><td>2</td><td>nishiko</td><td>28</td><td>1</td></tr>\n<tr><td>3</td><td>xxx</td><td>39</td><td>2</td></tr>\n</table>\n\n<p>card</p>\n<table>\n<tr><td>id</td><td>title</td><td>body</td></tr>\n<tr><td>1</td><td>rabbit</td><td>it jumps!</td></tr>\n<tr><td>2</td><td>pot</td><td>a tiny yellow magic pot</td></tr>\n<tr><td>3</td><td>PC</td><td>calculating...</td></tr>\n</table>\n\n<p>user_card</p>\n<table>\n<tr><td>id</td><td>user</td><td>card</td></tr>\n<tr><td>1</td><td>1</td><td>1</td></tr>\n<tr><td>2</td><td>2</td><td>1</td></tr>\n<tr><td>3</td><td>1</td><td>2</td></tr>\n<tr><td>4</td><td>2</td><td>3</td></tr>\n<tr><td>5</td><td>3</td><td>3</td></tr>\n</table>\n\n**Fetching N:1 related objects**\n\n```js\nvar result = db.table('user').find({name: \"shinout\"}, {join: JOIN_VALUE});\n```\n\n<table>\n<tr>\n<td>No.</td>\n<td>JOIN_VALUE</td>\n<td>description</td>\n<td>result</td></tr>\n\n<tr>\n<td>1</td>\n<th>\"group\"</th>\n<td>get \"group\" column as object</td>\n<td>[{id: 1, name: \"shinout\", age: 25, group_id: 1, group: {id: 1, name: \"mindia\"}}]</td>\n</tr>\n\n<tr>\n<td>2</td>\n<th>{group : true}</th>\n<td>get \"group\" column as object (the same as sample1)</td>\n<td>[{id: 1, name: \"shinout\", age: 25, group_id: 1, group: {id: 1, name: \"mindia\"}}]</td>\n</tr>\n\n<tr>\n<td>3</td>\n<th>true</th>\n<td>get all the related columns as object</td>\n<td>[{id: 1, name: \"shinout\", age: 25, group_id: 1, group: {id: 1, name: \"mindia\"}}]</td>\n</tr>\n\n<tr>\n<td>4</td>\n<th>{group : {name: {like$: \"mind\"}}}</th>\n<td>get \"group\" column as object whose name starts at \"mind\"</td>\n<td>[{id: 1, name: \"shinout\", age: 25, group_id: 1, group: {id: 1, name: \"mindia\"}}]</td>\n</tr>\n\n<tr>\n<td>5</td>\n<th>{group : {name: \"ZZZ\"}}</th>\n<td>get \"group\" column as object whose name is equal to \"ZZZ\"</td>\n<td>[] // empty</td>\n</tr>\n</table>\n\n\n**Fetching 1:N related objects**\n\n    var result = db.table('group').find({name: \"mindia\"}, {join: JOIN_VALUE});\n\n<table>\n<tr>\n<td>No.</td>\n<td>JOIN_VALUE</td>\n<td>description</td>\n<td>result</td></tr>\n\n<tr>\n<td>6</td>\n<th>\"user.group\"</th>\n<td>get \"user\" table objects (setting the related column in \"user\" table)</td>\n<td>[{id: 1, name: \"mindia\", \"user.group\": [{id: 1, name: \"shinout\", age: 25}, {id: 2, name: \"nishiko\", age: 28}]}]</td>\n</tr>\n\n<tr>\n<td>7</td>\n<th>\"user\"</th>\n<td>get \"user\" table objects (if related column is obvious)</td>\n<td>[{id: 1, name: \"mindia\", \"user\": [{id: 1, name: \"shinout\", age: 25}, {id: 2, name: \"nishiko\", age: 28}]}]</td>\n</tr>\n\n<tr>\n<td>8</td>\n<th>{\"user.group\" : true }</th>\n<td>get \"user\" table objects (the same as sample6)</td>\n<td>[{id: 1, name: \"mindia\", \"user.group\": [{id: 1, name: \"shinout\", age: 25}, {id: 2, name: \"nishiko\", age: 28}]}]</td>\n</tr>\n\n<tr>\n<td>9</td>\n<th>{\"user.group\" : {age : {gt: 27}} }</th>\n<td>get \"user\" table objects with age greater than 27</td>\n<td>[{id: 1, name: \"mindia\", \"user.group\": [{id: 2, name: \"nishiko\", age: 28}]}]</td>\n</tr>\n\n<tr>\n<td>10</td>\n<th>{\"user.group\" : {age : {gt: 27}, as: \"users\"} }</th>\n<td>get \"user\" table objects with age greater than 27, with alias name \"users\"</td>\n<td>[{id: 1, name: \"mindia\", \"users\": [{id: 2, name: \"nishiko\", age: 28}]}]</td>\n</tr>\n\n<tr>\n<td>11</td>\n<th>{\"user.group\" : {where : {age : {gt: 27}}, as: \"users\"} }</th>\n<td>get \"user\" table objects with age greater than 27, with alias name \"users\" (the canonical expression of sample9)</td>\n<td>[{id: 1, name: \"mindia\", \"users\": [{id: 2, name: \"nishiko\", age: 28}]}]</td>\n</tr>\n\n<tr>\n<td>12</td>\n<th>{user : {age : {gt: 27}, as: \"users\"} }</th>\n<td>get \"user\" table objects with age greater than 27, with alias name \"users\"</td>\n<td>[{id: 1, name: \"mindia\", \"users\": [{id: 2, name: \"nishiko\", age: 28}]}]</td>\n</tr>\n\n<tr>\n<td>13</td>\n<th>{user : {age : {gt: 47}, outer: true} }</th>\n<td>outer joining. Records containing Empty 1:N subqueries can be remained with the column filled with null.</td>\n<td>[{id: 1, name: \"mindia\", \"user\": null}]</td>\n</tr>\n\n<tr>\n<td>13</td>\n<th>{user : {age : {gt: 47}, outer: \"array\"} }</th>\n<td>outer joining. Records containing Empty 1:N subqueries can be remained with the column filled with empty array.</td>\n<td>[{id: 1, name: \"mindia\", \"user\": [] }]</td>\n</tr>\n\n\n</table>\n\n**Fetching N:M related objects**\n\n    var result = db.table('user').find({name: \"shinout\"}, {join: JOIN_VALUE});\n\n<table>\n<tr>\n<td>15</td>\n<th>{\"card\": {via: \"user_card\"} }</th>\n<td>get \"card\" related through \"user_card\"</td>\n<td>[{id: 1, name: \"shinout\", \"card\": [ {id:1, ...}, {id: 3, ...}] }]</td>\n</tr>\n</table>\n\n### table.one(id) ###\nGets one object by id.\n\n### table.one(query, options) ###\nGets one result by **table.find()**.\n\n\n### table.del(id) ###\nDeletes a record with a given **id** .\n\n\n### table.del(query) ###\nDeletes records with a given **query** .\n**query** is the same argument as **table.find(query)**.\n\n\n#### relation handling in deletion ####\nWhen a record is deleted, related records are also deleted.\n\n\nThink upon the schema.\n\nFirst, inserts users, cards and these relations.\n\n```js\nvar jsrel = JSRel.use('sample', {schema: schema});\n\nvar uTable = jsrel.table('user');\nvar cTable = jsrel.table('card');\nvar ucTable = jsrel.table('user_card');\n\nvar shinout = uTable.ins({nickName: \"shinout\"});\nvar nishiko = uTable.ins({nickName: \"nishiko\"});\n\nvar rabbit = uTable.ins({title: \"rabbit\", body: \"It jumps!\"});\nvar pot    = uTable.ins({title: \"pot\", body: \"a tiny yellow magic pot\"});\n\nucTable.ins({ user: shinout, card: rabbit });\nucTable.ins({ user: nishiko, card: rabbit });\nucTable.ins({ user: shinout, card: pot });\n```\n\n\nNext, delete shinout.\n\n```js\nuTable.del(shinout);\n```\n\nThen, the dependent records ( shinout-rabbit, shinout-pot ) are also removed.\n\n```js\nucTable.find().length; // 1 (nishiko-rabbit)\n```\n\n\nshortcut\n--------\n\n- jsrel.ins(tableName, ...)\n- jsrel.upd(tableName, ...)\n- jsrel.find(tableName, ...)\n- jsrel.one(tableName, ...)\n- jsrel.del(tableName, ...)\n\nare, select table via jsrel.table(tableName) in the first place.\nThen run the operation using the remaining arguments.\n\nfor example,\n\n```js\njsre.ins('user', {nickName: \"shinout\"});\n```\n\nis completely equivalent to\n\n```js\njsrel.table('user').ins({nickName: \"shinout\"});\n```\n\n\nmake it standalone\n--------------------\n**[standalone](https://github.com/shinout/standalone)** is a library to make a worker process / thread which can communicate with master.\n\nHere are the basic concept.\n\nmaster.js\n\n```js\nstandalone(\"worker.js\", function(model) {\n\n  model.getSongsByArtist(\"the Beatles\", function(err, songs) {\n    console.log(songs);\n  });\n\n});\n```\n\n\nworker.js\n    \n```js\nvar db = JSRel.use(\"xxx\", {schema: {\n  artist: {name: true},\n  song  : {title: true, artist: \"artist\"}\n}});\nvar btls = db.ins(\"artist\", {name: \"the Beatles\"});\ndb.ins(\"song\", {title: \"Help!\", artist: btls});\ndb.ins(\"song\", {title: \"In My Life\", artist: btls});\n\nvar model = {\n  getSongsByArtist: function(name) {\n    return db.find(\"artist\", {name : name}, {join: \"song\", select : \"song\"});\n  }\n};\nstandalone(model);\n```\n\nIn master.js, we can use \"getSongsByArtist\" asynchronously, catching possible errors in err.\n\nIn Node.js, **standalone** spawns a child process.\n\nIn browsers, **standalone** creates a WebWorker instance.\n\nIn Titanium, standalone is not supported.\n\n### environmental specific code ###\n\nBecause Node.js and WebWorker has a different requiring system,\nWe must be careful of loading scripts.\n\n\nin Node.js (worker.js)\n\n```js\nvar JSRel = require('jsrel');\nvar standalone = require('standalone');\n```\n\nThis is enough.\n\nin browsers (worker.js)\n\n```js\nimportScripts('/pathto/SortedList.js', '/pathto/jsrel.js', '/pathto/standalone.js');\n```\n\nDon't forget to import **[SortedList](https://github.com/shinout/SortedList)** (which JSRel depends on). \n\n\nLICENSE\n-------\n(The MIT License)\n\nCopyright (c) 2012 SHIN Suzuki <shinout310@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","maintainers":[{"name":"shinout","email":"shinout310@gmail.com"}],"time":{"modified":"2022-07-13T13:48:42.579Z","created":"2012-03-12T05:32:41.676Z","0.0.0":"2012-03-12T05:32:50.292Z","0.0.1":"2012-03-13T00:57:30.078Z","0.0.2":"2012-03-13T02:28:42.499Z","0.0.3":"2012-03-13T02:52:09.740Z","0.0.4":"2012-03-13T04:02:57.229Z","0.0.5":"2012-03-13T04:32:11.356Z","0.0.6":"2012-03-13T04:51:29.870Z","0.0.7":"2012-03-14T23:01:30.997Z","0.0.8":"2012-03-14T23:37:50.314Z","0.1.0":"2012-03-15T02:17:13.862Z","0.1.3":"2012-03-20T01:18:47.240Z","0.1.4":"2012-03-24T07:56:25.559Z","0.1.5":"2012-03-25T00:48:50.150Z","0.1.6":"2012-03-25T03:25:10.608Z","0.1.7":"2012-03-27T01:35:41.010Z","0.1.9":"2013-01-05T16:32:40.370Z","0.1.10":"2013-01-05T19:52:53.001Z","0.1.12":"2013-05-04T10:47:47.753Z","0.1.13":"2013-06-04T18:18:07.632Z","0.1.14":"2013-06-04T20:27:02.414Z","0.1.15":"2013-06-10T14:20:52.863Z","0.2.0":"2013-06-13T19:08:35.284Z","0.2.1":"2013-06-14T08:27:47.448Z","0.2.2":"2013-06-15T08:22:34.982Z","0.2.3":"2013-06-15T12:44:18.324Z","0.2.5":"2014-03-02T21:15:21.730Z","0.2.4":"2014-03-02T21:16:27.822Z","0.3.0":"2014-03-15T16:25:08.009Z","0.3.1":"2014-03-18T18:44:24.978Z","0.3.2":"2014-03-18T18:49:39.696Z","0.3.3":"2014-05-22T11:04:52.038Z","0.3.4":"2014-05-22T11:14:08.326Z","0.3.5":"2014-05-23T05:16:54.774Z","0.3.6":"2014-05-24T05:09:03.717Z","0.3.7":"2014-05-24T06:15:42.983Z","0.3.8":"2014-05-29T01:27:01.257Z","0.3.9":"2014-05-31T02:45:55.353Z","0.4.0":"2014-08-10T11:59:28.297Z","0.4.1":"2014-08-31T05:50:00.111Z"},"author":{"name":"SHIN Suzuki","email":"shinout310@gmail.com"},"repository":{"url":"git://github.com/shinout/jsrel"},"keywords":["database","DB","RDB","relation"],"readmeFilename":"README.md","homepage":"https://github.com/shinout/jsrel","bugs":{"url":"https://github.com/shinout/jsrel/issues"}}