├── .editorconfig ├── .eslintignore ├── .gitattributes ├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml ├── renovate.json5 └── workflows │ ├── Build and test.yml │ ├── codeql.yml │ ├── dependency-review.yml │ └── scorecard.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .npmignore ├── .prettierignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── RELEASES.md ├── SECURITY.md ├── TESTLOG.md ├── bin ├── alaserver.js └── alasql-cli.js ├── build.sh ├── examples ├── angular │ └── import-export-excel │ │ ├── import-export-to-excel.factory.js │ │ ├── import-from-excel.directive.js │ │ ├── test.controller.js │ │ └── test.html ├── country │ └── city.js ├── nodesample.js ├── other │ └── test.js ├── param.js ├── promise.js ├── simple │ └── ex102.js └── sqlite │ └── test.js ├── modules └── xlsx │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── bin │ └── xlsx.njs │ ├── bower.json │ ├── dist │ ├── LICENSE │ ├── cpexcel.d.ts │ ├── cpexcel.full.mjs │ ├── cpexcel.js │ ├── shim.min.js │ ├── xlsx.core.min.js │ ├── xlsx.core.min.map │ ├── xlsx.extendscript.js │ ├── xlsx.full.min.js │ ├── xlsx.full.min.map │ ├── xlsx.mini.min.js │ ├── xlsx.mini.min.map │ ├── xlsx.zahl.js │ ├── xlsx.zahl.mjs │ └── zahl.d.ts │ ├── package.ori.json │ ├── types │ ├── index.d.ts │ └── tsconfig.json │ ├── xlsx.js │ ├── xlsx.mjs │ └── xlsxworker.js ├── package.json ├── src ├── 05copyright.js ├── 10start.js ├── 12pretty.js ├── 15utility.js ├── 16comments.js ├── 17alasql.js ├── 18promise.js ├── 20database.js ├── 21transaction.js ├── 23table.js ├── 24view.js ├── 25queryclass.js ├── 28yy.js ├── 30statements.js ├── 35search.js ├── 38query.js ├── 39dojoin.js ├── 40select.js ├── 41exists.js ├── 420from.js ├── 421join.js ├── 422where.js ├── 423groupby.js ├── 424select.js ├── 425having.js ├── 426orderby.js ├── 427pivot.js ├── 43rollup.js ├── 44defcols.js ├── 45union.js ├── 46apply.js ├── 47over.js ├── 50expression.js ├── 52linq.js ├── 55functions.js ├── 56sprintf.js ├── 57case.js ├── 58json.js ├── 59convert.js ├── 60createtable.js ├── 61date.js ├── 62droptable.js ├── 63createvertex.js ├── 64altertable.js ├── 65createindex.js ├── 66dropindex.js ├── 67withselect.js ├── 68if.js ├── 69while.js ├── 70insert.js ├── 71trigger.js ├── 72delete.js ├── 74update.js ├── 75merge.js ├── 76usedatabase.js ├── 77declare.js ├── 78show.js ├── 79set.js ├── 80console.js ├── 81commit.js ├── 821tsql.js ├── 822mysql.js ├── 823postgres.js ├── 824oracle.js ├── 825sqlite.js ├── 826orientdb.js ├── 830into.js ├── 831xls.js ├── 832xlsxml.js ├── 833xlsx.js ├── 839zip.js ├── 843xml.js ├── 844gexf.js ├── 84from.js ├── 85help.js ├── 86print.js ├── 87source.js ├── 88require.js ├── 89assert.js ├── 91indexeddb.js ├── 92localstorage.js ├── 93sqljs.js ├── 94filestorage.js ├── 97saveas.js ├── 98finish.js ├── 99worker-finish.js ├── 99worker-start.js ├── 99worker.js ├── FileSaver.js ├── alasqlparser.jison ├── alasqlparser.js ├── console │ └── README.md ├── db2 │ └── README.md ├── debug │ └── README.md ├── echo │ ├── README.md │ └── alasql-echo.js ├── filestorage │ └── README.md ├── filesystem │ └── README.md ├── graph │ └── README.md ├── help │ └── README.md ├── html │ └── README.md ├── indexeddb │ └── README.md ├── linq │ └── README.md ├── localstorage │ └── README.md ├── lovefield │ └── README.md ├── md │ └── README.md ├── mongodb │ └── README.md ├── mysql │ └── README.md ├── neo4j │ └── README.md ├── oracle │ └── README.md ├── orientdb │ ├── README.md │ ├── alasql-orientdb.js │ └── orientdbparser.jison ├── postgres │ └── README.md ├── pouchdb │ └── README.md ├── pretty │ └── README.md ├── prolog │ ├── README.md │ ├── alasql-prolog.js │ └── prolog.coffee ├── sprintf │ └── README.md ├── sqlite │ └── README.md ├── sqljs │ └── README.md ├── tabletop │ └── README.md ├── tsql │ └── README.md ├── websql │ ├── README.md │ └── sqliteparser.jison ├── xls │ └── README.md └── xml │ └── README.md ├── test ├── !testlog │ ├── Chakra.md │ ├── Chrome.md │ ├── Edge.md │ ├── Firefox.md │ ├── IE.md │ ├── SQLlogic Chakra.md │ ├── SQLlogic.md │ └── Safari.md ├── browserTestRunner.js ├── browserTestRunner.tmlp.html ├── coverage │ ├── coverage.json │ ├── lcov-report │ │ ├── base.css │ │ ├── index.html │ │ ├── lib │ │ │ └── zt │ │ │ │ ├── index.html │ │ │ │ └── zt.js.html │ │ ├── prettify.css │ │ ├── prettify.js │ │ ├── sort-arrow-sprite.png │ │ └── sorter.js │ └── lcov.info ├── lib │ ├── assert │ │ └── assert.js │ ├── mocha │ │ ├── mocha.css │ │ └── mocha.js │ ├── xlsx │ │ └── xlsx.core.min.js │ └── zt │ │ └── zt.js ├── performance │ ├── benchmark_alasql.js │ ├── count.html │ ├── speed │ │ ├── speedtest.js │ │ └── test01.js │ ├── var.html │ ├── vssqlike.html │ ├── vssqljs.html │ ├── vssqljs2.html │ ├── vssqljs3.html │ └── vssqljs4.html ├── skip │ ├── test119.js │ ├── test123.js │ ├── test131.js │ ├── test132.js │ ├── test134.js │ ├── test135.js │ └── test136.js ├── test.js ├── test000.js ├── test001.js ├── test002.js ├── test003.js ├── test004.js ├── test005.js ├── test006.js ├── test007.js ├── test008.js ├── test009.js ├── test010.js ├── test011.js ├── test012.js ├── test013.js ├── test014.js ├── test015.js ├── test016.js ├── test016a.js ├── test017.js ├── test018.js ├── test019.js ├── test020.js ├── test021.js ├── test022.js ├── test023.js ├── test024.js ├── test025.js ├── test026.js ├── test027.js ├── test028.js ├── test029.js ├── test030.js ├── test031.js ├── test032.js ├── test033.js ├── test034.js ├── test035.js ├── test036.js ├── test037.js ├── test038.js ├── test039.js ├── test040.js ├── test041.js ├── test042.js ├── test043.js ├── test044.js ├── test045.js ├── test046.js ├── test047.js ├── test048.js ├── test049.js ├── test050.js ├── test051.js ├── test052.js ├── test053.js ├── test054.js ├── test055.js ├── test056.js ├── test057.js ├── test058.js ├── test059.js ├── test060.js ├── test061.js ├── test062.js ├── test063.js ├── test064.js ├── test065.js ├── test066.js ├── test067.js ├── test068.js ├── test069.js ├── test070.js ├── test071.js ├── test072.js ├── test073.js ├── test074.js ├── test075.js ├── test076.js ├── test077.js ├── test078.js ├── test079.js ├── test080.js ├── test081.js ├── test082.js ├── test083.js ├── test084.js ├── test085.js ├── test086.js ├── test087.js ├── test088.js ├── test089.js ├── test090.js ├── test091.js ├── test092.js ├── test093.js ├── test094.js ├── test095.js ├── test096.js ├── test097.js ├── test098.js ├── test099.js ├── test100.js ├── test101.js ├── test102.js ├── test103.js ├── test104.js ├── test105.js ├── test106.js ├── test107.js ├── test108.js ├── test109.js ├── test110.js ├── test1109.js ├── test111.js ├── test1119.js ├── test112.js ├── test113.js ├── test114.js ├── test115.js ├── test116.js ├── test117.js ├── test118.js ├── test119.js ├── test120.js ├── test121.js ├── test122.js ├── test123.js ├── test124.js ├── test125.js ├── test126.js ├── test1263.js ├── test127.js ├── test127.sql ├── test128.js ├── test128.sql ├── test129.js ├── test130.js ├── test131.js ├── test131.sql ├── test132.js ├── test133.js ├── test134.csv ├── test134.js ├── test134.tab ├── test135.js ├── test136.js ├── test137.js ├── test138.js ├── test139.js ├── test140.js ├── test1400.js ├── test1400a.csv ├── test1400b.csv ├── test1409.js ├── test141.js ├── test1415.js ├── test142.js ├── test143.js ├── test144.js ├── test145.js ├── test146.js ├── test148.js ├── test149.js ├── test149.json ├── test1495.js ├── test1496.js ├── test150.js ├── test150.json ├── test151.js ├── test151.json ├── test152.js ├── test1526.js ├── test153.js ├── test154.js ├── test155.js ├── test1556.js ├── test156.js ├── test157.js ├── test157.json ├── test157.txt ├── test157a.csv ├── test157a.tab ├── test157b.csv ├── test157b.tab ├── test158.js ├── test159.js ├── test159.json ├── test160.js ├── test160.txt ├── test161.js ├── test162.js ├── test162.json ├── test163.js ├── test164.js ├── test1641.js ├── test1645.js ├── test166.js ├── test1666.js ├── test167.js ├── test168.js ├── test168.xls ├── test168.xlsx ├── test1684.js ├── test169.js ├── test169.txt ├── test169a.csv ├── test169a.tab ├── test169b.tab ├── test170.js ├── test172.js ├── test173.js ├── test1734.js ├── test174.js ├── test175.js ├── test176.js ├── test176a.tab ├── test176b.csv ├── test176c.csv ├── test176d.csv ├── test177.js ├── test178.js ├── test1789.js ├── test179.js ├── test1796.js ├── test1797.js ├── test180.js ├── test181.js ├── test182.js ├── test1820.js ├── test1829.js ├── test183.js ├── test184.js ├── test185.js ├── test186.js ├── test187.js ├── test1871.js ├── test188.js ├── test1885.js ├── test1889.js ├── test189.js ├── test189.sql ├── test1898.js ├── test190.js ├── test1904.js ├── test191.js ├── test1919.js ├── test1919.jsonl ├── test1919.ndjson ├── test192.js ├── test193.js ├── test1936.js ├── test194.js ├── test195.js ├── test196.js ├── test197.js ├── test1977.js ├── test198-1.sql ├── test198-2.sql ├── test198.js ├── test1983.js ├── test199.js ├── test200.js ├── test2000.js ├── test201.js ├── test202.js ├── test2027.js ├── test203.js ├── test203myfn.js1 ├── test203myfn2.js1 ├── test204.js ├── test205.js ├── test206.js ├── test207.js ├── test208.js ├── test209.js ├── test210.js ├── test211.js ├── test212.js ├── test213.js ├── test214.js ├── test215.js ├── test216.js ├── test217.js ├── test218.js ├── test219.js ├── test220.js ├── test221.js ├── test222.js ├── test223.js ├── test224.js ├── test225.js ├── test226.js ├── test227.js ├── test228.js ├── test229.js ├── test230.js ├── test231.js ├── test232.js ├── test233.js ├── test233.sql ├── test234.js ├── test234.sql ├── test235.js ├── test236.js ├── test237.js ├── test238.js ├── test238.json ├── test238a.csv ├── test238b.xlsx ├── test239.js ├── test239.json ├── test240.js ├── test241.js ├── test242.js ├── test242.xlsx ├── test243.js ├── test244.js ├── test245.js ├── test246.js ├── test247.js ├── test248.js ├── test249.js ├── test250.js ├── test251.js ├── test252.js ├── test253.js ├── test254.js ├── test255.js ├── test256.js ├── test257.js ├── test258.js ├── test259.js ├── test260.js ├── test261.js ├── test262.js ├── test263.js ├── test264.js ├── test265.js ├── test266.js ├── test267.js ├── test268.js ├── test269.js ├── test270.js ├── test271.js ├── test272.js ├── test273.js ├── test274.js ├── test275.js ├── test276.js ├── test277.js ├── test278.js ├── test278.json ├── test279.js ├── test280.js ├── test281.js ├── test282.js ├── test283.js ├── test284.js ├── test285.js ├── test286.js ├── test287.js ├── test288.js ├── test289.js ├── test290.js ├── test291.js ├── test292.js ├── test293.js ├── test294.js ├── test295.js ├── test296.js ├── test297.js ├── test298.js ├── test299.js ├── test300.js ├── test301.js ├── test302.js ├── test303.js ├── test304.js ├── test305.js ├── test305a.gexf ├── test306.js ├── test306.xml ├── test306a.xml ├── test307.js ├── test308.js ├── test309.js ├── test310.js ├── test311.js ├── test312.js ├── test313.js ├── test314.js ├── test315.js ├── test316.js ├── test317.js ├── test318.js ├── test319.js ├── test320.js ├── test321.js ├── test321a.csv ├── test322.js ├── test323.js ├── test324.js ├── test324.sql ├── test325.js ├── test326.js ├── test327.js ├── test328.js ├── test329.js ├── test330.js ├── test331.js ├── test332.js ├── test333.js ├── test334.js ├── test335.js ├── test336.js ├── test337.js ├── test338.js ├── test339.js ├── test340.js ├── test341.js ├── test342.js ├── test343.js ├── test344.js ├── test345.js ├── test346.js ├── test347.js ├── test348.js ├── test349.js ├── test350.js ├── test351.js ├── test352.js ├── test353.js ├── test354.js ├── test355.js ├── test356.js ├── test357.js ├── test358.js ├── test359.js ├── test360.js ├── test361.js ├── test362.js ├── test363.js ├── test364.js ├── test365.js ├── test366.js ├── test367.js ├── test368.js ├── test369.js ├── test370.js ├── test371.js ├── test372.js ├── test373.js ├── test374.js ├── test375.js ├── test376.js ├── test377.js ├── test378.js ├── test379.js ├── test379.json ├── test380.js ├── test380.json ├── test381.js ├── test381.json ├── test382.js ├── test383.js ├── test384.js ├── test385.js ├── test386.js ├── test387.js ├── test388.js ├── test389.js ├── test389.json ├── test390.js ├── test390.json ├── test391.js ├── test391.json ├── test392.js ├── test393.js ├── test394.js ├── test395.js ├── test396.js ├── test397.js ├── test398.js ├── test399.js ├── test400.js ├── test401.js ├── test402.js ├── test403.js ├── test404.js ├── test404.sql ├── test405.js ├── test406.js ├── test407.js ├── test408.js ├── test409.js ├── test410.js ├── test411.js ├── test411.xlsx ├── test412.js ├── test413.js ├── test414.js ├── test415.js ├── test416.js ├── test417.js ├── test418.js ├── test419.js ├── test419.xlsx ├── test419a.txt ├── test420.js ├── test420.xlsx ├── test421.js ├── test422.js ├── test423.js ├── test424.js ├── test425.js ├── test426.js ├── test427.js ├── test428.js ├── test429.js ├── test429.json ├── test430.js ├── test431.js ├── test432.js ├── test433.js ├── test434.js ├── test490.js ├── test604.js ├── test605.js ├── test606.js ├── test607.js ├── test608.js ├── test609.js ├── test610.js ├── test611.js ├── test612.js ├── test613.js ├── test614.js ├── test614.xlsx ├── test615.js ├── test615.xlsx ├── test616.js ├── test617.js ├── test618.js ├── test619.js ├── test620.js ├── test622.js ├── test623.js ├── test624CSVParsing.js ├── test625.js ├── test625.xlsx ├── test626.csv ├── test626.js ├── test627.js ├── test7.js ├── test789.js ├── test800.js ├── test801.js ├── test802.js ├── test803.js ├── test804.js ├── test805.js ├── test806.js ├── test807.js ├── test808.js ├── test809.js ├── test810.js ├── test811.js ├── test812.js ├── test813.js ├── test814.js ├── test815.js ├── test816.js ├── test817.js ├── test818.js ├── test819.js ├── test845.js ├── test846.js └── worker.html ├── tslint.json ├── types └── alasql.d.ts └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | ; EditorConfig file: https://EditorConfig.org 2 | ; Install the "EditorConfig" plugin into your editor to use 3 | 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | end_of_line = lf 9 | insert_final_newline = true 10 | indent_style = tab 11 | trim_trailing_whitespace = true 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.min.js 2 | src/alasqlparser.js 3 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | 2 | *.xlsx binary 3 | *.xls binary 4 | yarn.lock binary 5 | 6 | /dist/* binary merge=ours 7 | *.min.js binary 8 | 9 | # absolute paths are ok, as are globs 10 | #/**/postinst* text eol=lf 11 | 12 | # paths that don't start with / are relative to the .gitattributes folder 13 | #relative/path/*.txt text eol=lf 14 | 15 | 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | AlaSQL is based on unpaid voluntary work. Thank you for taking the time to make it better. 3 | 4 | 5 | Got ChatGPT? 6 | ============ 7 | 8 | - Try the AlaSQL Bot for answering questions and helping you out with your programming. It has all the documentation and heaps of examples. 9 | 10 | - https://chat.openai.com/g/g-XcBL24WTe-alasql-bot 11 | 12 | 13 | Something is not working as expected? 14 | ==================================== 15 | 16 | - Describe the problem. 17 | 18 | - Provide data and code that replicates the problem. 19 | 20 | - We suggest spawning a jsfiddle from https://jsfiddle.net/b5ajLveq/ 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | Thank you for the time you are putting into AlaSQL! 3 | 4 | 5 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: / 5 | schedule: 6 | interval: monthly 7 | 8 | - package-ecosystem: npm 9 | directory: / 10 | schedule: 11 | interval: monthly 12 | -------------------------------------------------------------------------------- /.github/renovate.json5: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base" 5 | ], 6 | "packageRules": [ 7 | { 8 | "matchUpdateTypes": ["minor", "patch", "pin", "digest"], 9 | "automerge": true 10 | } 11 | ], 12 | "automerge": true, 13 | "automergeStrategy": "squash", 14 | "dependencyDashboard": true, 15 | "schedule": ["every weekend"], 16 | "ignorePaths": ["modules/**"] 17 | 18 | } 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Results of tests 2 | test/res* 3 | node_modules/ 4 | npm-debug.log 5 | site/ 6 | test/test604.json 7 | test/test251.xlsx 8 | .versions 9 | .npm/ 10 | *.log 11 | yarn-error.log 12 | package-lock.json 13 | /dist/ 14 | pnpm-lock.yaml 15 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | yarn test-format || (echo please format using 'yarn format' && exit 1) -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | examples/ 2 | test/ 3 | src/ 4 | *.md 5 | gulpfile.js 6 | yarn.lock 7 | tslint.json 8 | .* 9 | *.log -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | src/10start.js 2 | 3 | src/98finish.js 4 | 5 | src/99worker-finish.js 6 | 7 | src/99worker-start.js 8 | 9 | src/alasqlparser.js 10 | 11 | src/97saveas.js 12 | 13 | modules/ 14 | 15 | test/test238.json 16 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | Hi 2 | 3 | Lovely to hear you found a problem. Lets solve it together. 4 | 5 | If you dont feel like writing an issue about it you are welcome to contact Mathias and/or Andrew 6 | 7 | - [Mathias Wulff](mailto:hi@mwulff.com) 8 | - [Andrey Gershun](mailto:agershun@gmail.com) 9 | 10 | -------------------------------------------------------------------------------- /bin/alaserver.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | // 3 | // alaserver.js = Alasql Server 4 | // Date: 25.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | 8 | var alasql = require('alasql'); 9 | var http = require('http'); 10 | var url = require('url'); 11 | var port = (process.argv[2] || 1337) | 0; 12 | if (!port) { 13 | throw new Error('Wrong port number ' + process.argv[3]); 14 | } 15 | 16 | http 17 | .createServer(function (req, res) { 18 | var sql = decodeURI(url.parse(req.url).search).substr(1); 19 | var a = ''; 20 | try { 21 | a = alasql(sql); 22 | } catch (err) { 23 | a = err.toString(); 24 | } 25 | res.writeHead(200, {'Content-Type': 'application/json'}); 26 | res.end(JSON.stringify(a)); 27 | }) 28 | .listen(port, '127.0.0.1'); 29 | 30 | console.log('Server running at http://127.0.0.1:' + port + '/'); 31 | -------------------------------------------------------------------------------- /examples/angular/import-export-excel/import-export-to-excel.factory.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular.module('jfy').factory('ImportExportToExcel', ImportExportToExcel); 5 | 6 | function ImportExportToExcel(alasql, $log, $rootScope) { 7 | return { 8 | importFromExcel: function (event) { 9 | if (event.target.files.length == 0) { 10 | return false; 11 | } 12 | alasql('SELECT * FROM FILE(?,{headers:true})', [event], function (data) { 13 | $rootScope.$broadcast('import-excel-data', data); 14 | }); 15 | }, 16 | exportToExcel: function (fileName, targetData) { 17 | if (!angular.isArray(targetData)) { 18 | $log.error('Can not export error type data to excel.'); 19 | return; 20 | } 21 | alasql('SELECT * INTO XLSX("' + fileName + '.xlsx",{headers:true}) FROM ?', [targetData]); 22 | }, 23 | }; 24 | } 25 | })(); 26 | -------------------------------------------------------------------------------- /examples/angular/import-export-excel/import-from-excel.directive.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular.module('jfy').directive('importFromExcel', importFromExcel); 5 | 6 | function importFromExcel(ImportExportToExcel) { 7 | var directive = { 8 | restrict: 'A', 9 | link: linkFunc, 10 | }; 11 | return directive; 12 | 13 | function linkFunc(scope, element) { 14 | element.change(function (event) { 15 | ImportExportToExcel.importFromExcel(event.originalEvent); 16 | }); 17 | } 18 | } 19 | })(); 20 | -------------------------------------------------------------------------------- /examples/angular/import-export-excel/test.controller.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular.module('jfy').controller('TestController', TestController); 5 | 6 | /** @ngInject */ 7 | function TestController($scope, ImportExportToExcel) { 8 | var vm = this; 9 | 10 | vm.tableData = [ 11 | {a: 1, b: 10}, 12 | {a: 2, b: 20}, 13 | ]; 14 | vm.export = function () { 15 | ImportExportToExcel.exportToExcel('test', vm.tableData); 16 | }; 17 | $scope.$on('import-excel-data', function (e, v) { 18 | console.log('excel-data:', v); 19 | }); 20 | } 21 | })(); 22 | -------------------------------------------------------------------------------- /examples/angular/import-export-excel/test.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Select CSV file to read:

4 | 5 |
6 | -------------------------------------------------------------------------------- /examples/country/city.js: -------------------------------------------------------------------------------- 1 | var alasql = require('../../alasql'); 2 | 3 | alasql.from.csv = function (filename, opts) { 4 | var fs = require('fs'); 5 | // console.log(__dirname+'/'+filename); 6 | var txt = fs.readFileSync(filename).toString(); 7 | var aaa = txt.split(/\r?\n/); 8 | var h = aaa.shift().split(','); 9 | // console.log(h); 10 | return {rows: aaa, headers: h}; 11 | }; 12 | 13 | alasql( 14 | "select country_name into #city from csv('country.csv',@{headers:true}) where continent_code = 'AF'", 15 | [], 16 | function (res) { 17 | console.log(res[0]); 18 | console.log(alasql.temp.city); 19 | } 20 | ); 21 | -------------------------------------------------------------------------------- /examples/nodesample.js: -------------------------------------------------------------------------------- 1 | // 2 | // AlaSQL node.js sample 3 | // 4 | 5 | var alasql = require('alasql'); 6 | 7 | var db = new alasql.Database(); 8 | 9 | db.exec('CREATE TABLE test (one INT, two INT)'); 10 | db.tables.test.data = [ 11 | // You can mix SQL and JavaScript 12 | {one: 3, two: 4}, 13 | {one: 5, two: 6}, 14 | ]; 15 | 16 | var res = db.exec('SELECT * FROM test ORDER BY two DESC'); 17 | 18 | console.log(res); 19 | -------------------------------------------------------------------------------- /examples/other/test.js: -------------------------------------------------------------------------------- 1 | var alasql = require('../../alasql'); 2 | 3 | var groups = [ 4 | {id: 4, name: 'abcd', id_group: '1'}, 5 | {id: 5, name: 'efgh', id_group: '1'}, 6 | {id: 6, name: 'ijkl', id_group: '1'}, 7 | {id: 4, name: 'abcd', id_group: '2'}, 8 | {id: 7, name: 'mnop', id_group: '2'}, 9 | ]; 10 | 11 | var res = alasql( 12 | 'select id_group, count(id) as cnt from ? where id in (4,7)\ 13 | group by id_group having cnt = 2', 14 | [groups] 15 | ); 16 | 17 | console.log(res); 18 | 19 | var res = alasql( 20 | 'select id_group, count(id) as cnt from ? where id in (4,7)\ 21 | group by id_group having count(id) = 2', 22 | [groups] 23 | ); 24 | 25 | console.log(res); 26 | 27 | //document.getElementById('result').textContent = JSON.stringify(res); 28 | -------------------------------------------------------------------------------- /examples/param.js: -------------------------------------------------------------------------------- 1 | var alasql = require('alasql'); 2 | 3 | var data = [{a: 0}, {a: 1}, {a: 2}, {a: 3}, {a: 4}]; 4 | 5 | var res = alasql('SELECT * FROM ? WHERE a >= ?', [data, 2]); 6 | 7 | console.log(res); 8 | -------------------------------------------------------------------------------- /examples/promise.js: -------------------------------------------------------------------------------- 1 | // Async select 2 | 3 | var db = require('alasql'); 4 | 5 | db('CREATE TABLE test (language INT, hello STRING)'); 6 | db("INSERT INTO test VALUES (1,'Hello!')"); 7 | db("INSERT INTO test VALUES (2,'Aloha!')"); 8 | db("INSERT INTO test VALUES (3,'Bonjour!')"); 9 | 10 | db.promise('SELECT * FROM test WHERE language > 1').then(function (res) { 11 | console.log(res); 12 | }); 13 | -------------------------------------------------------------------------------- /examples/simple/ex102.js: -------------------------------------------------------------------------------- 1 | // require(['../../alasql.js'], function(alasql) { 2 | // alasql('CREATE TABLE test1 (a int, b int, c int)'); 3 | // alasql('INSERT INTO test1 VALUES (1,10,1)'); 4 | // console.log(alasql('SELECT * FROM test1')); 5 | // }); 6 | require(['../../alasql.js'], function (alasql) { 7 | var test1 = [ 8 | {a: 1, b: 2, c: 3}, 9 | {a: 4, b: 5, c: 6}, 10 | {a: 7, b: 8, c: 9}, 11 | ]; 12 | console.table(alasql('SELECT a, b*c AS bc FROM ? AS t', [test1])); 13 | }); 14 | -------------------------------------------------------------------------------- /examples/sqlite/test.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var SQL = require('./sql.js'); 3 | var data = fs.readFileSync('./Chinook_Sqlite.sqlite'); 4 | var sqldb = new SQL.Database(data); 5 | console.log(sqldb); 6 | -------------------------------------------------------------------------------- /modules/xlsx/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-xlsx", 3 | "homepage": "https://github.com/SheetJS/js-xlsx", 4 | "main": ["xlsx.js"], 5 | "ignore": [ 6 | "bin", 7 | "bits", 8 | "misc", 9 | "**/.*" 10 | ], 11 | "keywords": [ 12 | "excel", 13 | "xls", 14 | "xml", 15 | "xlsx", 16 | "xlsm", 17 | "xlsb", 18 | "ods", 19 | "js-xls", 20 | "js-xlsx" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /modules/xlsx/dist/zahl.d.ts: -------------------------------------------------------------------------------- 1 | /* zahl.d.ts (C) 2022-present SheetJS */ 2 | // TypeScript Version: 2.2 3 | declare const XLSX_ZAHL_PAYLOAD: string; 4 | export default XLSX_ZAHL_PAYLOAD; 5 | -------------------------------------------------------------------------------- /modules/xlsx/types/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "lib": [ "es5" ], 5 | "noImplicitAny": true, 6 | "noImplicitThis": true, 7 | "strictNullChecks": false, 8 | "baseUrl": ".", 9 | "paths": { "xlsx": ["."] }, 10 | "types": [], 11 | "noEmit": true, 12 | "strictFunctionTypes": true, 13 | "forceConsistentCasingInFileNames": true 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /modules/xlsx/xlsxworker.js: -------------------------------------------------------------------------------- 1 | /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ 2 | importScripts('dist/shim.min.js'); 3 | /* uncomment the next line for encoding support */ 4 | importScripts('dist/cpexcel.js'); 5 | importScripts('xlsx.js'); 6 | postMessage({t:"ready"}); 7 | 8 | onmessage = function (evt) { 9 | var v; 10 | try { 11 | v = XLSX.read(evt.data.d, {type: evt.data.b, codepage: evt.data.c}); 12 | postMessage({t:"xlsx", d:JSON.stringify(v)}); 13 | } catch(e) { postMessage({t:"e",d:e.stack||e}); } 14 | }; 15 | -------------------------------------------------------------------------------- /src/12pretty.js: -------------------------------------------------------------------------------- 1 | /** 2 | 12prettyflag.js - prettify 3 | @todo move this functionality to plugin 4 | */ 5 | 6 | /** 7 | Pretty flag - nice HTML output or standard text without any tags 8 | @type {boolean} 9 | */ 10 | 11 | alasql.prettyflag = false; 12 | 13 | /** 14 | Pretty output of SQL functions 15 | @function 16 | @param {string} sql SQL statement 17 | @param {boolean} flag value 18 | @return {string} HTML or text string with pretty output 19 | */ 20 | 21 | alasql.pretty = function (sql, flag) { 22 | var pf = alasql.prettyflag; 23 | alasql.prettyflag = !flag; 24 | var s = alasql.parse(sql).toString(); 25 | alasql.prettyflag = pf; 26 | return s; 27 | }; 28 | -------------------------------------------------------------------------------- /src/24view.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // View class for Alasql.js 4 | // Date: 14.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | // Table class 10 | class View { 11 | constructor(params) { 12 | // Columns 13 | this.columns = []; 14 | this.xcolumns = {}; 15 | // Data array 16 | this.query = []; 17 | 18 | Object.assign(this, params); 19 | } 20 | } 21 | 22 | alasql.View = View; 23 | 24 | /*/* 25 | // View = function(){ 26 | // this.data = []; 27 | // this.columns = []; 28 | // this.ixcolumns = {}; 29 | // this.ixdefs = {}; 30 | // this.indices = {}; 31 | // }; 32 | 33 | // alasql.View = View; 34 | */ 35 | -------------------------------------------------------------------------------- /src/25queryclass.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // Query class for Alasql.js 4 | // Date: 14.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | // Table class 10 | 11 | /** 12 | @class Query Main query class 13 | */ 14 | class Query { 15 | constructor(params) { 16 | this.alasql = alasql; 17 | // console.log(12,alasql); 18 | // Columns 19 | this.columns = []; 20 | this.xcolumns = {}; 21 | this.selectGroup = []; 22 | this.groupColumns = {}; 23 | // Data array 24 | Object.assign(this, params); 25 | } 26 | } 27 | 28 | /** 29 | @class Recordset data object 30 | */ 31 | class Recordset { 32 | constructor(params) { 33 | // Data array 34 | Object.assign(this, params); 35 | } 36 | } 37 | 38 | alasql.Recordset = Recordset; 39 | alasql.Query = Query; 40 | -------------------------------------------------------------------------------- /src/28yy.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // Parser helper for Alasql.js 4 | // Date: 03.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | // Base class for all yy classes 10 | class Base { 11 | constructor(params) { 12 | Object.assign(this, params); 13 | } 14 | toString() {} 15 | toType() {} 16 | toJS() {} 17 | exec() {} 18 | compile() {} 19 | } 20 | 21 | var yy = { 22 | // Utility 23 | /** @deprecated use `Object.assign` instead */ 24 | extend: Object.assign, 25 | 26 | // Option for case sensitive 27 | casesensitive: alasql.options.casesensitive, 28 | Base, 29 | }; 30 | 31 | alasqlparser.yy = alasql.yy = yy; 32 | -------------------------------------------------------------------------------- /src/30statements.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // Statements class for Alasql.js 4 | // Date: 03.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | yy.Statements = class Statements { 10 | constructor(params) { 11 | Object.assign(this, params); 12 | } 13 | 14 | toString() { 15 | return this.statements.map(st => st.toString()).join('; '); 16 | } 17 | 18 | // Compile array of statements into single statement 19 | compile(db) { 20 | const statements = this.statements.map(st => st.compile(db)); 21 | return statements.length === 1 22 | ? statements[0] 23 | : (params, cb) => { 24 | const res = statements.map(st => st(params)); 25 | if (cb) cb(res); 26 | return res; 27 | }; 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /src/425having.js: -------------------------------------------------------------------------------- 1 | /* global yy */ 2 | 3 | yy.Select.prototype.compileHaving = function (query) { 4 | if (this.having) { 5 | var s = this.having.toJS('g', -1); 6 | query.havingfns = s; 7 | // console.log(s); 8 | return new Function('g,params,alasql', 'var y;return ' + s); 9 | } 10 | 11 | return function () { 12 | return true; 13 | }; 14 | }; 15 | -------------------------------------------------------------------------------- /src/45union.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // UNION for Alasql.js 4 | // Date: 03.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | // SELECT UNION statement 10 | 11 | yy.Union = class Union { 12 | constructor(params) { 13 | Object.assign(this, params); 14 | } 15 | 16 | toString() { 17 | return 'UNION'; 18 | } 19 | 20 | compile(tableid) { 21 | return null; 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /src/46apply.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // CROSS AND OUTER APPLY for Alasql.js 4 | // Date: 03.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | yy.Apply = class Apply { 10 | constructor(params) { 11 | Object.assign(this, params); 12 | } 13 | 14 | toString() { 15 | let s = `${this.applymode} APPLY (${this.select.toString()})`; 16 | 17 | if (this.as) { 18 | s += ` AS ${this.as}`; 19 | } 20 | 21 | return s; 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /src/47over.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // CROSS AND OUTER APPLY for Alasql.js 4 | // Date: 03.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | yy.Over = class Over { 10 | constructor(params) { 11 | Object.assign(this, params); 12 | } 13 | 14 | toString() { 15 | let s = 'OVER ('; 16 | if (this.partition) { 17 | s += `PARTITION BY ${this.partition.toString()}`; 18 | if (this.order) s += ' '; 19 | } 20 | if (this.order) { 21 | s += `ORDER BY ${this.order.toString()}`; 22 | } 23 | s += ')'; 24 | return s; 25 | } 26 | }; 27 | -------------------------------------------------------------------------------- /src/66dropindex.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // DROP TABLE for Alasql.js 4 | // Date: 03.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | yy.DropIndex = function (params) { 10 | return Object.assign(this, params); 11 | }; 12 | yy.DropIndex.prototype.toString = function () { 13 | return 'DROP INDEX' + this.indexid; 14 | }; 15 | 16 | // DROP TABLE 17 | yy.DropIndex.prototype.compile = function (db) { 18 | var indexid = this.indexid; 19 | return function () { 20 | return 1; 21 | }; 22 | }; 23 | -------------------------------------------------------------------------------- /src/821tsql.js: -------------------------------------------------------------------------------- 1 | if (alasql.options.tsql) { 2 | // 3 | // Check tables and views 4 | // IF OBJECT_ID('dbo.Employees') IS NOT NULL 5 | // DROP TABLE dbo.Employees; 6 | // IF OBJECT_ID('dbo.VSortedOrders', 'V') IS NOT NULL 7 | // DROP VIEW dbo.VSortedOrders; 8 | 9 | alasql.stdfn.OBJECT_ID = function (name, type) { 10 | if (typeof type == 'undefined') type = 'T'; 11 | type = type.toUpperCase(); 12 | 13 | var sname = name.split('.'); 14 | var dbid = alasql.useid; 15 | var objname = sname[0]; 16 | if (sname.length == 2) { 17 | dbid = sname[0]; 18 | objname = sname[1]; 19 | } 20 | 21 | var tables = alasql.databases[dbid].tables; 22 | dbid = alasql.databases[dbid].databaseid; 23 | for (var tableid in tables) { 24 | if (tableid == objname) { 25 | // TODO: What OBJECT_ID actually returns 26 | 27 | if (tables[tableid].view && type == 'V') return dbid + '.' + tableid; 28 | if (!tables[tableid].view && type == 'T') return dbid + '.' + tableid; 29 | return undefined; 30 | } 31 | } 32 | 33 | return undefined; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /src/822mysql.js: -------------------------------------------------------------------------------- 1 | if (alasql.options.mysql) { 2 | alasql.fn.TIMESTAMPDIFF = function (unit, date1, date2) { 3 | return alasql.stdfn.DATEDIFF(unit, date1, date2); 4 | }; 5 | } 6 | 7 | if (alasql.options.mysql || alasql.options.sqlite) { 8 | // Pseudo INFORMATION_SCHEMA function 9 | alasql.from.INFORMATION_SCHEMA = function (filename, opts, cb, idx, query) { 10 | if (filename == 'VIEWS' || filename == 'TABLES') { 11 | var res = []; 12 | for (var databaseid in alasql.databases) { 13 | var tables = alasql.databases[databaseid].tables; 14 | for (var tableid in tables) { 15 | if ( 16 | (tables[tableid].view && filename == 'VIEWS') || 17 | (!tables[tableid].view && filename == 'TABLES') 18 | ) { 19 | res.push({TABLE_CATALOG: databaseid, TABLE_NAME: tableid}); 20 | } 21 | } 22 | } 23 | if (cb) res = cb(res, idx, query); 24 | return res; 25 | } 26 | throw new Error('Unknown INFORMATION_SCHEMA table'); 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /src/823postgres.js: -------------------------------------------------------------------------------- 1 | if (alasql.options.postgres) { 2 | } 3 | -------------------------------------------------------------------------------- /src/824oracle.js: -------------------------------------------------------------------------------- 1 | if (alasql.options.oracle) { 2 | } 3 | -------------------------------------------------------------------------------- /src/825sqlite.js: -------------------------------------------------------------------------------- 1 | if (alasql.options.sqlite) { 2 | } 3 | -------------------------------------------------------------------------------- /src/826orientdb.js: -------------------------------------------------------------------------------- 1 | if (alasql.options.orientdb) { 2 | } 3 | -------------------------------------------------------------------------------- /src/844gexf.js: -------------------------------------------------------------------------------- 1 | alasql.from.GEXF = function (filename, opts, cb, idx, query) { 2 | var res; 3 | alasql('SEARCH FROM XML(' + filename + ')', [], function (data) { 4 | res = data; 5 | // console.log(res); 6 | if (cb) res = cb(res); 7 | }); 8 | return res; 9 | }; 10 | -------------------------------------------------------------------------------- /src/87source.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // HELP for Alasql.js 4 | // Date: 03.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | yy.Source = function (params) { 10 | return Object.assign(this, params); 11 | }; 12 | yy.Source.prototype.toString = function () { 13 | var s = 'SOURCE'; 14 | if (this.url) s += " '" + this.url + " '"; 15 | return s; 16 | }; 17 | 18 | // SOURCE FILE 19 | yy.Source.prototype.execute = function (databaseid, params, cb) { 20 | var res; 21 | loadFile( 22 | this.url, 23 | !!cb, 24 | function (data) { 25 | res = alasql(data); 26 | if (cb) res = cb(res); 27 | return res; 28 | }, 29 | function (err) { 30 | throw err; 31 | } 32 | ); 33 | return res; 34 | }; 35 | -------------------------------------------------------------------------------- /src/89assert.js: -------------------------------------------------------------------------------- 1 | /* 2 | // 3 | // HELP for Alasql.js 4 | // Date: 03.11.2014 5 | // (c) 2014, Andrey Gershun 6 | // 7 | */ 8 | 9 | yy.Assert = function (params) { 10 | return Object.assign(this, params); 11 | }; 12 | yy.Source.prototype.toString = function () { 13 | var s = 'ASSERT'; 14 | if (this.value) s += ' ' + JSON.stringify(this.value); 15 | return s; 16 | }; 17 | 18 | // SOURCE FILE 19 | yy.Assert.prototype.execute = function (databaseid) { 20 | if (!deepEqual(alasql.res, this.value)) { 21 | throw new Error( 22 | (this.message || 'Assert wrong') + 23 | ': ' + 24 | JSON.stringify(alasql.res) + 25 | ' == ' + 26 | JSON.stringify(this.value) 27 | ); 28 | } 29 | return 1; 30 | }; 31 | -------------------------------------------------------------------------------- /src/97saveas.js: -------------------------------------------------------------------------------- 1 | if(utils.isBrowser && !utils.isWebWorker) { 2 | -------------------------------------------------------------------------------- /src/98finish.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | /* 4 | // 5 | // Last part of Alasql.js 6 | // Date: 03.11.2014 7 | // (c) 2014, Andrey Gershun 8 | // 9 | */ 10 | 11 | // This is a final part of Alasql 12 | 13 | 14 | /*only-for-browser/* 15 | if(utils.isCordova || utils.isMeteorServer || utils.isNode ){ 16 | console.log('It looks like you are using the browser version of AlaSQL. Please use the alasql.fs.js file instead.') 17 | } 18 | //*/ 19 | 20 | 21 | // FileSaveAs 22 | alasql.utils.saveAs = saveAs; 23 | 24 | }; 25 | 26 | // Create default database 27 | new Database("alasql"); 28 | 29 | // Set default database 30 | alasql.use("alasql"); 31 | 32 | return alasql; 33 | })); 34 | 35 | -------------------------------------------------------------------------------- /src/99worker-finish.js: -------------------------------------------------------------------------------- 1 | 2 | /* WebWorker */ 3 | /** @type {number} */ 4 | alasql.lastid = 0; 5 | 6 | /** @type {object} */ 7 | alasql.buffer = {}; 8 | 9 | alasql.worker(); 10 | 11 | return alasql; 12 | })); 13 | -------------------------------------------------------------------------------- /src/console/README.md: -------------------------------------------------------------------------------- 1 | # Console functions 2 | 3 | * ECHO 4 | * PRINT -------------------------------------------------------------------------------- /src/db2/README.md: -------------------------------------------------------------------------------- 1 | # DB2 syntax + connector -------------------------------------------------------------------------------- /src/debug/README.md: -------------------------------------------------------------------------------- 1 | # Debugging functions 2 | 3 | ASSERT -------------------------------------------------------------------------------- /src/echo/README.md: -------------------------------------------------------------------------------- 1 | # Echo Plugin 2 | 3 | This is a simple test plugin to support only one command: 4 | ```js 5 | alasql('REQUIRE ECHO'); 6 | var res = alasql('ECHO 123'); 7 | ``` 8 | returns 123 -------------------------------------------------------------------------------- /src/echo/alasql-echo.js: -------------------------------------------------------------------------------- 1 | // Plugin sample 2 | 3 | var yy = alasql.yy; 4 | 5 | yy.Echo = function (params) { 6 | return Object.assign(this, params); 7 | }; 8 | yy.Echo.prototype.toString = function () { 9 | var s = 'TEST ' + this.expr.toString(); 10 | return s; 11 | }; 12 | 13 | yy.Echo.prototype.execute = function (databaseid, params, cb) { 14 | // var self = this; 15 | // console.log(76336,this.expr.toJS()); 16 | var fn = new Function('params, alasql', 'return ' + this.expr.toJS()); 17 | var res = fn(params, alasql); 18 | if (cb) res = cb(res); 19 | return res; 20 | }; 21 | -------------------------------------------------------------------------------- /src/filestorage/README.md: -------------------------------------------------------------------------------- 1 | # Native AlaSQL database backend 2 | -------------------------------------------------------------------------------- /src/filesystem/README.md: -------------------------------------------------------------------------------- 1 | # HTML5 FileSystem backend -------------------------------------------------------------------------------- /src/graph/README.md: -------------------------------------------------------------------------------- 1 | # AlaSQL Graph functions 2 | 3 | * CREATE GRAPH 4 | * Graph SEARCH functions (searchers and selectors) 5 | * Path finding function 6 | -------------------------------------------------------------------------------- /src/help/README.md: -------------------------------------------------------------------------------- 1 | # AlaSQL internal help system 2 | 3 | * HELP keyword -------------------------------------------------------------------------------- /src/html/README.md: -------------------------------------------------------------------------------- 1 | # HTML import-export + connector functions -------------------------------------------------------------------------------- /src/indexeddb/README.md: -------------------------------------------------------------------------------- 1 | # AlaSQL IndexedDB backend -------------------------------------------------------------------------------- /src/linq/README.md: -------------------------------------------------------------------------------- 1 | # ALaSQL Fulent interface 2 | -------------------------------------------------------------------------------- /src/localstorage/README.md: -------------------------------------------------------------------------------- 1 | # LocalStorage and SessionStorage database backend -------------------------------------------------------------------------------- /src/lovefield/README.md: -------------------------------------------------------------------------------- 1 | # AlaSQL Lovefield SQL interface -------------------------------------------------------------------------------- /src/md/README.md: -------------------------------------------------------------------------------- 1 | # MD (Markdonw) plug-in 2 | 3 | This is an example of simple AlaSQL plugin. 4 | 5 | ```sql 6 | REQUIRE MD; 7 | SELECT * INTO MD('RESULTS.md',{headers:true}) FROM one; 8 | ``` -------------------------------------------------------------------------------- /src/mongodb/README.md: -------------------------------------------------------------------------------- 1 | # MongoDB AlaSQL interface -------------------------------------------------------------------------------- /src/mysql/README.md: -------------------------------------------------------------------------------- 1 | # MySQL syntax and pass-thru driver -------------------------------------------------------------------------------- /src/neo4j/README.md: -------------------------------------------------------------------------------- 1 | # Neo4j syntax + pass-thru connector -------------------------------------------------------------------------------- /src/oracle/README.md: -------------------------------------------------------------------------------- 1 | # Oracle syntax + pass-thru connector 2 | -------------------------------------------------------------------------------- /src/orientdb/README.md: -------------------------------------------------------------------------------- 1 | # AlaSQL OrientDB plugin 2 | 3 | Supported commands: 4 | ``` 5 | OSELECT 6 | CREATE CLASS 7 | CREATE VERTEX 8 | CREATE EDGE 9 | ``` -------------------------------------------------------------------------------- /src/orientdb/alasql-orientdb.js: -------------------------------------------------------------------------------- 1 | // 2 | // AlaSQL OrientDB compatibility plugin 3 | // (c) 2015, Andrey Gershun 4 | // 5 | var yy = alasql.yy; 6 | -------------------------------------------------------------------------------- /src/postgres/README.md: -------------------------------------------------------------------------------- 1 | # Postgres syntax + connector -------------------------------------------------------------------------------- /src/pouchdb/README.md: -------------------------------------------------------------------------------- 1 | Support PouchDB backend -------------------------------------------------------------------------------- /src/pretty/README.md: -------------------------------------------------------------------------------- 1 | # Prettyfier functions 2 | 3 | alasql.pretty(sql) -------------------------------------------------------------------------------- /src/prolog/README.md: -------------------------------------------------------------------------------- 1 | # Prolog queries 2 | 3 | :- 4 | ?- 5 | -------------------------------------------------------------------------------- /src/sprintf/README.md: -------------------------------------------------------------------------------- 1 | # Sprintf and other string formatting functions -------------------------------------------------------------------------------- /src/sqlite/README.md: -------------------------------------------------------------------------------- 1 | # SQLite syntax + pass-thru connector -------------------------------------------------------------------------------- /src/sqljs/README.md: -------------------------------------------------------------------------------- 1 | # SQL.js connector 2 | -------------------------------------------------------------------------------- /src/tabletop/README.md: -------------------------------------------------------------------------------- 1 | # Google Spreadsheet connector (with Tableto library) -------------------------------------------------------------------------------- /src/tsql/README.md: -------------------------------------------------------------------------------- 1 | # T-SQL syntax + SQL Server connector -------------------------------------------------------------------------------- /src/websql/README.md: -------------------------------------------------------------------------------- 1 | # WebSQL connector -------------------------------------------------------------------------------- /src/xls/README.md: -------------------------------------------------------------------------------- 1 | # Excel import-export operations -------------------------------------------------------------------------------- /src/xml/README.md: -------------------------------------------------------------------------------- 1 | # XML parsing and search functions -------------------------------------------------------------------------------- /test/!testlog/Edge.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/!testlog/Edge.md -------------------------------------------------------------------------------- /test/!testlog/IE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/!testlog/IE.md -------------------------------------------------------------------------------- /test/browserTestRunner.tmlp.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Mocha 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | @INSERT_TESTFILES 23 | 24 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /test/coverage/lcov-report/prettify.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} 2 | -------------------------------------------------------------------------------- /test/coverage/lcov-report/sort-arrow-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/coverage/lcov-report/sort-arrow-sprite.png -------------------------------------------------------------------------------- /test/skip/test131.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (false) { 9 | describe('Test 131 CAST and CONVERT', function () { 10 | it('1. CAST', function (done) { 11 | alasql('source "' + __dirname + '/test131.sql"'); 12 | done(); 13 | }); 14 | 15 | it('2. CAST dates', function (done) { 16 | alasql.options.datetimeformat = 'javascript'; 17 | var res = alasql.value('select cast("1998-01-01" as date)'); 18 | assert(typeof res, 'object'); 19 | assert(res instanceof Date); 20 | assert(res.valueOf(), new Date('1998-01-01').valueOf()); 21 | 22 | alasql.options.datetimeformat = 'sql'; 23 | var res = alasql.value('select cast("1998-01-01" as date)'); 24 | assert(res, '1998-01-01'); 25 | done(); 26 | }); 27 | }); 28 | } 29 | -------------------------------------------------------------------------------- /test/skip/test135.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 135 a la NoSQL', function () { 9 | var test135; 10 | it('1. Insert NoSQL', function (done) { 11 | var test135 = alasql.create('test135'); 12 | var one = test135.create('one'); 13 | one.insert({a: 1, b: 2}, function (res) { 14 | assert(res == 1); 15 | one.find({a: 1}, function (res) { 16 | assert.deepEqual(res, {a: 1, b: 2}); 17 | done(); 18 | }); 19 | }); 20 | }); 21 | 22 | it('99. Clear database', function (done) { 23 | test135.drop(); 24 | done(); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/skip/test136.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 136 get JSON property', function () { 9 | it('1. Get element of object and Array', function (done) { 10 | var res = alasql('SELECT * FROM JSON([{a:1,b:[3,4]},{e:1}]) WHERE b->[1] = 4'); 11 | assert.deepEqual(res, [{a: 1, b: [3, 4]}]); 12 | 13 | var res = alasql('SELECT * FROM JSON([{a:1,b:[3,4]},{e:1}]) WHERE b == JSON([3,4])'); 14 | assert.deepEqual(res, [{a: 1, b: [3, 4]}]); 15 | 16 | var res = alasql('SELECT * FROM JSON([{a:1,b:[3,4]},{e:1}]) WHERE e = 1'); 17 | assert.deepEqual(res, [{e: 1}]); 18 | 19 | done(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | console.log(''); 7 | console.log(' Running tests on alasql@' + alasql.version); 8 | console.log(''); 9 | console.log( 10 | ' Environment detected:', 11 | JSON.stringify( 12 | { 13 | alasqlPath: alasql.path, 14 | isBrowser: alasql.utils.isBrowser, 15 | isCordova: alasql.utils.isCordova, 16 | isMeteor: alasql.utils.isMeteor, 17 | isMeteorClient: alasql.utils.isMeteorClient, 18 | isMeteorServer: alasql.utils.isMeteorServer, 19 | isNode: alasql.utils.isNode, 20 | isWebWorker: alasql.utils.isWebWorker, 21 | }, 22 | null, 23 | 4 24 | ) 25 | ); 26 | -------------------------------------------------------------------------------- /test/test002.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 02', function () { 7 | it('Create table', function (done) { 8 | alasql('create database test02; use test02;'); 9 | alasql('DROP TABLE IF EXISTS schools'); 10 | alasql('CREATE TABLE schools (schoolid INT, schoolname STRING)'); 11 | assert.equal(alasql.databases.test02.tables.schools.columns.length, 2); 12 | alasql('drop database test02'); 13 | done(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /test/test006.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 06', function () { 7 | it('Fiddle test ', function (done) { 8 | var db = new alasql.Database(); 9 | 10 | db.exec('CREATE TABLE person (name STRING, sex STRING, income INT)'); 11 | 12 | db.tables.person.data = [ 13 | {name: 'bill', sex: 'M', income: 50000}, 14 | {name: 'sara', sex: 'F', income: 100000}, 15 | ]; 16 | 17 | var res = db.exec("SELECT * FROM person WHERE sex='F' AND income > 60000"); 18 | 19 | assert.deepEqual([{name: 'sara', sex: 'F', income: 100000}], res); 20 | done(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test007.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 007', function () { 7 | it('UPDATE WHERE test ', function (done) { 8 | var db = new alasql.Database('test007'); 9 | 10 | db.exec('CREATE TABLE test (a INT, b INT, c INT)'); 11 | db.exec('INSERT INTO test VALUES (1,10,100)'); 12 | db.exec('INSERT INTO test VALUES (2,20,200)'); 13 | db.exec('INSERT INTO test VALUES (3,30,300)'); 14 | db.exec('INSERT INTO test VALUES (4,40,400)'); 15 | db.exec('INSERT INTO test VALUES (5,50,500)'); 16 | 17 | db.exec('UPDATE test SET a=c*100 WHERE b<=3*10'); 18 | 19 | // console.log(db.exec('SELECT * FROM test')) 20 | var res = db.exec('SELECT VALUE SUM(a) FROM test'); 21 | 22 | assert.equal(60009, res); 23 | alasql('DROP DATABASE test007'); 24 | done(); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test008.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 08', function () { 7 | it('UPDATE WHERE with conditions test ', function (done) { 8 | var db = new alasql.Database(); 9 | 10 | db.exec('CREATE TABLE test (a INT, b INT, c INT)'); 11 | db.exec('INSERT INTO test VALUES (1,10,100)'); 12 | db.exec('INSERT INTO test VALUES (2,20,200)'); 13 | db.exec('INSERT INTO test VALUES (3,30,300)'); 14 | db.exec('INSERT INTO test VALUES (4,40,400)'); 15 | db.exec('INSERT INTO test VALUES (5,50,500)'); 16 | 17 | db.exec('UPDATE test SET a=a*100, b=-b WHERE b<=3*10 AND a<>2'); 18 | 19 | var res = db.exec('SELECT VALUE SUM(a) FROM test'); 20 | assert.equal(411, res); 21 | 22 | var res = db.exec('SELECT VALUE MIN(b) FROM test'); 23 | assert.equal(-30, res); 24 | done(); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test009.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 09', function () { 7 | it('Test LEFT JOIN', function (done) { 8 | alasql.exec('DROP TABLE IF EXISTS test'); 9 | alasql.exec('CREATE TABLE test (a int, b int)'); 10 | alasql.exec('INSERT INTO test VALUES (1,1)'); 11 | alasql.exec('INSERT INTO test VALUES (1,7)'); 12 | alasql.exec('INSERT INTO test VALUES (2,2)'); 13 | alasql.exec('INSERT INTO test VALUES (3,3)'); 14 | 15 | alasql.exec('DROP TABLE IF EXISTS test1'); 16 | alasql.exec('CREATE TABLE test1 (a int, c int)'); 17 | alasql.exec('INSERT INTO test1 VALUES (1,5)'); 18 | alasql.exec('INSERT INTO test1 VALUES (2,6)'); 19 | 20 | var res = alasql.exec( 21 | 'SELECT SUM(b) AS sb,a,c FROM test LEFT JOIN test1 ON test.a = test1.a GROUP BY c,test.a' 22 | ); 23 | 24 | assert.equal(5, res[0].c); 25 | assert.equal(6, res[1].c); 26 | assert.equal(undefined, res[2].c); 27 | done(); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /test/test011.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 11', function () { 7 | it('Test compile with parameters', function (done) { 8 | alasql.exec('DROP TABLE IF EXISTS test'); 9 | 10 | alasql.exec('CREATE TABLE test (a int, b int)'); 11 | var insert = alasql.compile('INSERT INTO test VALUES ($a,$b)'); 12 | insert({a: 1, b: 1}); 13 | insert({a: 2, b: 2}); 14 | 15 | var insert2 = alasql.compile('INSERT INTO test VALUES (:a,:b)'); 16 | insert2({a: 3, b: 3}); 17 | insert2({a: 4, b: 4}); 18 | 19 | alasql.exec('INSERT INTO test VALUES (?,?)', [5, 5]); 20 | 21 | alasql.exec('UPDATE test SET b = 6 WHERE b = ?', [5]); 22 | 23 | var res = alasql.exec('SELECT * FROM test WHERE b > 5'); 24 | assert.deepEqual([{a: 5, b: 6}], res); 25 | 26 | alasql.exec('DELETE FROM test WHERE a > :val', {val: 1}); 27 | 28 | var res = alasql.exec('SELECT * FROM test'); 29 | assert.deepEqual([{a: 1, b: 1}], res); 30 | 31 | done(); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /test/test012.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 12', function () { 7 | it('store and restore - test not ready yet! ', function (done) { 8 | if (false) { 9 | var db = alasql.restore('mydb'); 10 | // console.log(!!db); 11 | if (!db) db = new alasql.Database('mydb'); 12 | // console.log(db); 13 | 14 | db.exec('CREATE TABLE IF NOT EXISTS students (studentid INT, studentname STRING)'); 15 | db.exec("INSERT INTO students VALUES (1,'John Johnson')"); 16 | db.exec("INSERT INTO students VALUES (2,'Peter Peterson')"); 17 | 18 | // console.table(db.exec('SELECT * FROM students')); 19 | // console.log(db.queryValue('SELECT COUNT(*) FROM students')); 20 | alasql.store('mydb'); 21 | } 22 | done(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/test013.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 13', function () { 7 | it('Transactions', function (done) { 8 | var db = new alasql.Database('mydb'); 9 | 10 | db.exec('CREATE TABLE students (studentid INT, studentname STRING)'); 11 | 12 | for (var i = 0; i < 1000; i++) { 13 | db.exec("INSERT INTO students VALUES (2,'Peter Peterson')"); 14 | } 15 | var res = db.exec('SELECT VALUE COUNT(*) FROM students'); 16 | assert.equal(1000, res); 17 | 18 | db.transaction(function (tx) { 19 | for (var i = 0; i < 1000; i++) { 20 | tx.exec("INSERT INTO students VALUES (3,'Alemu Abebe')"); 21 | } 22 | //console.log(1); 23 | var res = tx.exec('SELECT VALUE COUNT(*) FROM students'); 24 | assert.equal(2000, res); 25 | 26 | tx.rollback(); 27 | 28 | var res = tx.exec('SELECT VALUE COUNT(*) FROM students'); 29 | assert.equal(1000, res); 30 | 31 | done(); 32 | }); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /test/test018.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 18', function () { 7 | it('Subqueries and cross-joins', function (done) { 8 | var db = new alasql.Database(); 9 | 10 | db.exec('CREATE TABLE test (a int)'); 11 | db.exec('INSERT INTO test VALUES (1)'); 12 | db.exec('INSERT INTO test VALUES (2)'); 13 | db.exec('INSERT INTO test VALUES (3)'); 14 | db.exec('INSERT INTO test VALUES (4)'); 15 | db.exec('INSERT INTO test VALUES (5)'); 16 | db.exec('INSERT INTO test VALUES (6)'); 17 | db.exec('INSERT INTO test VALUES (7)'); 18 | var res = db.exec('SELECT VALUE SUM(a*2+1) AS aa FROM (SELECT a FROM test) q'); 19 | assert.equal(res, 63); 20 | 21 | var res = db.exec( 22 | 'SELECT q.x, w.y ' + 23 | ' FROM ' + 24 | ' (SELECT test.a AS x FROM test WHERE a<5) q, ' + 25 | ' (SELECT test.a AS y FROM test WHERE test.a>3) w ' 26 | ); 27 | assert.equal(res.length, 16); 28 | 29 | done(); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/test021.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 21', function () { 7 | it('Aggregators', function (done) { 8 | var db = new alasql.Database('db'); 9 | db.exec('CREATE TABLE test (a int, b int)'); 10 | db.exec('INSERT INTO test VALUES (1,1)'); 11 | db.exec('INSERT INTO test VALUES (2,1)'); 12 | db.exec('INSERT INTO test VALUES (3,1)'); 13 | db.exec('INSERT INTO test VALUES (4,2)'); 14 | db.exec('INSERT INTO test VALUES (5,2)'); 15 | db.exec('INSERT INTO test VALUES (6,2)'); 16 | 17 | var res = db.exec('SELECT b, SUM(a), COUNT(a), FIRST(a), LAST(a) FROM test GROUP BY b'); 18 | assert.deepEqual( 19 | [ 20 | { 21 | b: 1, 22 | 'SUM(a)': 6, 23 | 'COUNT(a)': 3, 24 | 'FIRST(a)': 1, 25 | 'LAST(a)': 3, 26 | }, 27 | { 28 | b: 2, 29 | 'SUM(a)': 15, 30 | 'COUNT(a)': 3, 31 | 'FIRST(a)': 4, 32 | 'LAST(a)': 6, 33 | }, 34 | ], 35 | res 36 | ); 37 | done(); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /test/test022.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 22', function () { 7 | it('EXCEPT and INTERSECT', function (done) { 8 | var db = new alasql.Database('db'); 9 | db.exec('CREATE TABLE test (a int, b int)'); 10 | db.exec('INSERT INTO test VALUES (1,1)'); 11 | db.exec('INSERT INTO test VALUES (2,2)'); 12 | db.exec('INSERT INTO test VALUES (3,3)'); 13 | db.exec('INSERT INTO test VALUES (4,4)'); 14 | db.exec('INSERT INTO test VALUES (5,5)'); 15 | db.exec('INSERT INTO test VALUES (6,6)'); 16 | 17 | var res = db.exec('SELECT COLUMN a FROM test WHERE a<5 INTERSECT SELECT a FROM test WHERE a>2'); 18 | 19 | assert.deepEqual([3, 4], res); 20 | 21 | var res = db.exec('SELECT COLUMN a FROM test WHERE a<5 EXCEPT SELECT a FROM test WHERE a>2'); 22 | assert.deepEqual([1, 2], res); 23 | 24 | done(); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test026.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 26', function () { 7 | it('Modulo operator', function (done) { 8 | var db = new alasql.Database('db'); 9 | db.exec('CREATE TABLE test1 (a int, b int)'); 10 | db.exec('INSERT INTO test1 VALUES (1,1)'); 11 | db.exec('INSERT INTO test1 VALUES (2,2)'); 12 | db.exec('INSERT INTO test1 VALUES (3,3)'); 13 | db.exec('INSERT INTO test1 VALUES (4,4)'); 14 | db.exec('INSERT INTO test1 VALUES (5,5)'); 15 | db.exec('INSERT INTO test1 VALUES (6,6)'); 16 | 17 | db.exec('CREATE TABLE test2 (a int, b int)'); 18 | db.exec('INSERT INTO test2 VALUES (1,10)'); 19 | db.exec('INSERT INTO test2 VALUES (2,20)'); 20 | db.exec('INSERT INTO test2 VALUES (3,30)'); 21 | 22 | var res = db.exec('SELECT VALUE SUM(a%3) FROM test1'); 23 | assert.equal(6, res); 24 | done(); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test030.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 30', function () { 7 | it('JOIN USING', function (done) { 8 | var db = new alasql.Database('db'); 9 | db.exec('CREATE TABLE test1 (a int, b int)'); 10 | db.exec('INSERT INTO test1 VALUES (1,1)'); 11 | db.exec('INSERT INTO test1 VALUES (2,2)'); 12 | db.exec('INSERT INTO test1 VALUES (3,3)'); 13 | db.exec('INSERT INTO test1 VALUES (4,4)'); 14 | db.exec('INSERT INTO test1 VALUES (5,5)'); 15 | db.exec('INSERT INTO test1 VALUES (6,6)'); 16 | 17 | var sql = 'SELECT COLUMN TOP 2 a FROM test1'; 18 | var res = db.exec(sql); 19 | assert.deepEqual([1, 2], res); 20 | 21 | var sql = 'SELECT COLUMN a FROM test1 LIMIT 3'; 22 | var res = db.exec(sql); 23 | assert.deepEqual([1, 2, 3], res); 24 | 25 | var sql = 'SELECT COLUMN a FROM test1 LIMIT 3 OFFSET 2'; 26 | var res = db.exec(sql); 27 | assert.deepEqual([3, 4, 5], res); 28 | 29 | done(); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/test031.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 31', function () { 7 | it('ALTER TABLE RENAME', function (done) { 8 | var db = new alasql.Database('db'); 9 | db.exec('DROP TABLE IF EXISTS test1'); 10 | db.exec('DROP TABLE IF EXISTS test2'); 11 | db.exec('CREATE TABLE test1 (a int, b int)'); 12 | db.exec('INSERT INTO test1 VALUES (1,1)'); 13 | db.exec('INSERT INTO test1 VALUES (2,2)'); 14 | db.exec('INSERT INTO test1 VALUES (3,3)'); 15 | db.exec('INSERT INTO test1 VALUES (4,4)'); 16 | db.exec('INSERT INTO test1 VALUES (5,5)'); 17 | db.exec('INSERT INTO test1 VALUES (6,6)'); 18 | 19 | var sql = 'SELECT a FROM test1'; 20 | assert.equal(6, db.exec(sql).length); 21 | 22 | var sql = 'ALTER TABLE test1 RENAME TO test2'; 23 | db.exec(sql); 24 | 25 | var sql = 'SELECT a FROM test2 '; 26 | assert.equal(6, db.exec(sql).length); 27 | done(); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /test/test033.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 33', function () { 7 | it('WHERE IN list of values', function (done) { 8 | var db = new alasql.Database('db'); 9 | db.exec('drop table if exists test1'); 10 | db.exec('CREATE TABLE test1 (a int, b int)'); 11 | db.exec('INSERT INTO test1 VALUES (1,1), (2,2), (3,3), (4,4), (5,5), (6,6)'); 12 | var sql = 'SELECT COLUMN a FROM test1 WHERE b IN (3,5)'; 13 | var res = db.exec(sql); 14 | assert.deepEqual([3, 5], res); 15 | done(); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /test/test034.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 34', function () { 7 | it('INSERT INTO VALUES', function (done) { 8 | var db = new alasql.Database('db'); 9 | db.exec('CREATE TABLE test (a STRING)'); 10 | db.exec("INSERT INTO test (a) VALUES ('a'), ('b'), ('c')"); 11 | 12 | var sql = 'SELECT COLUMN * FROM test'; 13 | assert.deepEqual(['a', 'b', 'c'], db.exec(sql)); 14 | 15 | done(); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /test/test039.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 39', function () { 7 | describe('Negative numbers', function () { 8 | var db; 9 | it('Prepare database', function (done) { 10 | db = new alasql.Database('db'); 11 | 12 | db.exec('CREATE TABLE one (a INT, b INT)'); 13 | db.exec('INSERT INTO one VALUES (-1,-10),(-2,-20),(3,30), (-4,40)'); 14 | done(); 15 | }); 16 | 17 | it('Negative numbers', function (done) { 18 | var res = db.exec('SELECT a,b,-1*a AS c FROM one WHERE b < -15 ORDER BY a'); 19 | assert.deepEqual(res, [{a: -2, b: -20, c: 2}]); 20 | done(); 21 | }); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test042.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 42', function () { 7 | describe('MID function', function () { 8 | var db; 9 | it('MID Function', function (done) { 10 | db = new alasql.Database('db'); 11 | 12 | db.exec('CREATE TABLE one (a STRING, b FLOAT)'); 13 | db.exec('INSERT INTO one VALUES ("One", 1.234),("Two", 2.9876443343),("Three", 3.3322343)'); 14 | var res = db.exec('SELECT COLUMN MID(a,2,2) AS b FROM one'); 15 | assert.deepEqual(['ne', 'wo', 'hr'], res); 16 | done(); 17 | }); 18 | 19 | it('ROUND Function', function (done) { 20 | var res = db.exec('SELECT COLUMN ROUND(b) AS b FROM one'); 21 | assert.deepEqual([1, 3, 3], res); 22 | 23 | var res = db.exec('SELECT COLUMN ROUND(b,1) AS b FROM one'); 24 | assert.deepEqual([1.2, 3.0, 3.3], res); 25 | 26 | done(); 27 | }); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /test/test045.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 45', function () { 7 | describe('table AS alias', function () { 8 | it('CASE Expression WHEN THEN END', function (done) { 9 | alasql('create database test45'); 10 | alasql('use test45'); 11 | alasql('CREATE TABLE one (a INT)'); 12 | alasql('INSERT INTO one VALUES (1),(2),(3),(4),(5)'); 13 | 14 | assert.equal(5, alasql('SELECT a FROM one').length); 15 | assert.equal(5, alasql('SELECT one.a FROM one').length); 16 | assert.equal(5, alasql('SELECT t.a FROM one t').length); 17 | assert.equal(5, alasql('SELECT t.a FROM one AS t').length); 18 | alasql('drop database test45'); 19 | done(); 20 | }); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test047.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 47', function () { 7 | describe('No error on subquery without alias', function () { 8 | it('Query without alias', function (done) { 9 | alasql('create database test47'); 10 | alasql('use test47'); 11 | alasql('DROP TABLE IF EXISTS one'); 12 | alasql('CREATE TABLE one (a INT)'); 13 | alasql('INSERT INTO one VALUES (1),(2),(3),(4),(5)'); 14 | 15 | var res = alasql('SELECT COLUMN * FROM (SELECT * FROM one WHERE a < 3)'); 16 | assert.deepEqual([1, 2], res); 17 | done(); 18 | }); 19 | 20 | it('Subsubqueries without alias', function (done) { 21 | var res = alasql('SELECT VALUE SUM(a) FROM (SELECT * FROM one WHERE a < 3)'); 22 | assert.equal(3, res); 23 | var res = alasql('SELECT VALUE COUNT(*) FROM (SELECT * FROM one WHERE a < 3)'); 24 | assert.equal(2, res); 25 | 26 | alasql('drop database test47'); 27 | done(); 28 | }); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/test054.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 54 - SELECT Number', function () { 7 | it('SELECT number', function (done) { 8 | alasql('create database test54'); 9 | alasql('use test54'); 10 | 11 | assert(10 == alasql('SELECT VALUE 10')); 12 | // console.log(alasql('SELECT RECORDSET 10,20')); 13 | assert.deepEqual([10, 20], alasql('SELECT ROW 10,20')); 14 | assert(4 == alasql('SELECT VALUE 2+2')); 15 | // console.log(alasql('SELECT RECORDSET "Peter"')); 16 | assert('Peter' == alasql('SELECT VALUE "Peter"')); 17 | assert(10 == alasql('SELECT VALUE a FROM (SELECT 10 AS a) AS t')); 18 | assert(10 == alasql('SELECT VALUE a FROM (SELECT 10 as a)')); 19 | 20 | // console.log(alasql('SELECT COLUMN a FROM (SELECT 10 as a UNION ALL SELECT 20 as a)')); 21 | assert.deepEqual( 22 | [10, 20], 23 | alasql('SELECT COLUMN a FROM (SELECT 10 as a UNION ALL SELECT 20 as a)') 24 | ); 25 | done(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /test/test055.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 55 - Error in WHERE and preIndex with ParamValue', function () { 7 | it('SELECT - gives "Cannot find indices of undefined"', function (done) { 8 | var q = []; 9 | for (var i = 0; i < 100000; i++) { 10 | q.push({a: i, b: (Math.random() * 1000) | 0}); 11 | } 12 | 13 | alasql('SELECT * FROM ? WHERE b=500', [q]); 14 | 15 | done(); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /test/test056.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 56 - Error in WHERE and preIndex with ParamValue', function () { 7 | var q = []; 8 | var n = 10000; 9 | for (var i = 0; i < n; i++) { 10 | q.push({a: i, b: (Math.random() * 1000) | 0}); 11 | } 12 | 13 | it('SELECT - order by "', function (done) { 14 | var w = alasql('SELECT q.* FROM ? q ORDER BY b', [q]); 15 | assert(w.length == n); 16 | done(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /test/test060.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 60 - Other minor', function () { 7 | it('DEAFAULT', function (done) { 8 | alasql('DROP TABLE IF EXISTS test'); 9 | alasql('CREATE TABLE test (a INT, b INT DEFAULT 100)'); 10 | done(); 11 | }); 12 | 13 | it('USE DATABASE', function (done) { 14 | alasql('INSERT INTO test (a) VALUES (5)'); 15 | done(); 16 | }); 17 | 18 | it('SELECT INTO and INTO SELECT', function (done) { 19 | alasql('drop table if exists cities'); 20 | alasql('create table cities (name string)'); 21 | alasql('insert into cities values ("Moscow"),("Roma"),("Minsk")'); 22 | 23 | alasql('create table towns (name string)'); 24 | alasql('insert into towns values ("New York"),("London"),("Paris")'); 25 | 26 | alasql('create table capitals (name string)'); 27 | alasql('insert into capitals select * from cities'); 28 | alasql('select * into capitals from cities'); 29 | 30 | alasql('select * from capitals'); 31 | done(); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /test/test061.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 61 - Increment', function () { 7 | it('AUTO_INCREMENT', function (done) { 8 | alasql('DROP TABLE IF EXISTS test'); 9 | alasql('CREATE TABLE test (a INT AUTO_INCREMENT, b INT)'); 10 | alasql('insert into test (b) values (10),(20),(30)'); 11 | var res = alasql('select * from test'); 12 | done(); 13 | }); 14 | 15 | it('IDENTITY', function (done) { 16 | alasql('DROP TABLE IF EXISTS test'); 17 | alasql('CREATE TABLE test (a INT IDENTITY(1,1), b INT)'); 18 | alasql('insert into test (b) values (10),(20),(30)'); 19 | var res = alasql('select * from test'); 20 | done(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test062.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 62 - ALTER TABLE', function () { 7 | it('Create new table', function (done) { 8 | alasql('create database test62'); 9 | alasql('use test62'); 10 | alasql('CREATE TABLE test (a INT AUTO_INCREMENT, b INT)'); 11 | alasql('insert into test (b) values (10),(20),(30)'); 12 | done(); 13 | }); 14 | 15 | it('ADD COLUMN', function (done) { 16 | alasql('alter table test add column name string'); 17 | alasql('insert into test (b,name) values (40,"Kosovo"),(50,"Belgrad"),(60,"Prague")'); 18 | var res = alasql('select * from test'); 19 | done(); 20 | }); 21 | 22 | it('MODIFY COLUMN', function (done) { 23 | alasql('alter table test modify column name int'); 24 | var res = alasql('select * from test'); 25 | done(); 26 | }); 27 | 28 | it('DROP COLUMN', function (done) { 29 | alasql('alter table test drop column b'); 30 | var res = alasql('select * from test'); 31 | alasql('drop database test62'); 32 | done(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /test/test063.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 63 - PIVOT', function () { 7 | it('Create new table', function (done) { 8 | alasql('create database test63'); 9 | alasql('use database test63'); 10 | alasql('drop table if exists sales'); 11 | alasql('create table sales (city string, product string, qty int)'); 12 | alasql('insert into sales values ("Minsk","Pen",100)'); 13 | alasql('insert into sales values ("Minsk","Pencil",100)'); 14 | alasql('insert into sales values ("Bratislava","Pen",50)'); 15 | assert.equal(250, alasql('select value sum(qty) from sales')); 16 | done(); 17 | }); 18 | 19 | it('PIVOT - not yet created', function (done) { 20 | var res = alasql('select * from sales'); 21 | 22 | // alasql('drop database test63'); 23 | done(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /test/test064.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 64 - Console', function () { 7 | it.skip('Console', function (done) { 8 | done(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test065.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 65 - Cursors', function () { 7 | it.skip('CURSOR', function (done) { 8 | done(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test066.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 66 - localStorage database', function () { 7 | it.skip('localStorage', function (done) { 8 | done(); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test067.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 67 - IndexedDB integration', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test068.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 68 - Pass-through database', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test069.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 69 - CSV and TAB database', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test070.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 70 - Streams processing', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test071.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 71 - WebWorker', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test072.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 72 - Explain', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test073.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 73 - Ajax', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test074.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 74 - Natural Join', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test075.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 75 - NULL, IS NULL', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test076.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 76 - Phone Gap', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test077.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 77 - Apache Cordova', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test078.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 78 - WinJS', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test079.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 79 - Prettify', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test080.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 79 - Prettify', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test081.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 81 - Hierarchies', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test082.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 82 - MDX Parser', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test083.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 83 - MDX SELECT', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test084.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 84 - Sandbox', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test085.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 85 - Mongo-like queries', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test086.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 86 - DESCRIBE TABLE', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test087.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 87 - EXPLAIN', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test088.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 88 - AngularJS ng-alasql', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test089.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 89 - d3 sample', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test090.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 91 - Binary Operators: *, /, %, +, -, <<, >>, &, ^, |, ||', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test091.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 91 - Binary Operators: *, /, %, +, -, <<, >>, &, ^, |, ||', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test093.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 93 - COUNT (NON NULL) & COUNT DISTINCT', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test094.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 94 - Persistence in Browser and Node', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test095.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 95 - Transactions', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test096.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 96 - CHECK', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test097.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 97 - TRIGGERS (SQL & JavaScript Way)', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test098.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 98 - UNIQUE', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test099.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 100 - DataTypes', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test100.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 100 - DataTypes', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test101.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 101 - Oracle, MySQL, MSSQL, SQLite, Postgress mode', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test102.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 102 - Execution Plan', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test103.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 103 - FORMAT', function () { 7 | // it.skip('localStorage', function(done){ 8 | // done(); 9 | // }); 10 | }); 11 | -------------------------------------------------------------------------------- /test/test105.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 105 - Synchronization over browsers and Node.js', function () {}); 7 | -------------------------------------------------------------------------------- /test/test106.js: -------------------------------------------------------------------------------- 1 | // 2 | // tselect01.js 3 | // Test for select 4 | // 5 | 6 | if (typeof exports === 'object') { 7 | var assert = require('assert'); 8 | var alasql = require('..'); 9 | } 10 | 11 | describe('Test 06 - Callback', function () { 12 | it('exec(sql, callback)', function (done) { 13 | alasql('create database test06; use test06'); 14 | alasql('CREATE TABLE test (a INT, b INT)'); 15 | alasql('INSERT INTO test VALUES (1,1)'); 16 | alasql('SELECT * FROM test', [], function (res) { 17 | assert(res[0].a == 1); 18 | alasql('drop database test06'); 19 | done(); 20 | }); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test107.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('CREATE TABLE', function () { 7 | it('Create table with same name twice', function (done) { 8 | var db = new alasql.Database(); 9 | db.exec('CREATE TABLE test (a int, b int)'); 10 | assert.throws(function () { 11 | db.exec('CREATE TABLE test (a int, c int)'); 12 | }, Error); 13 | done(); 14 | }); 15 | }); 16 | 17 | describe('CREATE TABLE IF EXISTS', function () { 18 | it('Try to create table if it already exists', function (done) { 19 | var db = new alasql.Database(); 20 | db.exec('CREATE TABLE test (a int, b int)'); 21 | db.exec('CREATE TABLE IF NOT EXISTS test (c int)'); 22 | assert.equal('a', db.tables.test.columns[0].columnid); 23 | done(); 24 | }); 25 | 26 | it('Create table if it does not exist', function (done) { 27 | var db = new alasql.Database(); 28 | db.exec('CREATE TABLE IF NOT EXISTS test (a int, c int)'); 29 | assert.equal(true, !!db.tables.test); 30 | done(); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /test/test108.js: -------------------------------------------------------------------------------- 1 | // 2 | // tselect01.js 3 | // Test for select 4 | // 5 | 6 | if (typeof exports === 'object') { 7 | var assert = require('assert'); 8 | var alasql = require('..'); 9 | } 10 | 11 | describe('Create database', function () { 12 | it('Create new database', function (done) { 13 | var db = new alasql.Database(); 14 | assert.deepEqual(db.tables, {}); 15 | done(); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /test/test1109.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 1109 - Export empty tables to excel sheets', function () { 7 | const test = '1109'; 8 | 9 | before(function () { 10 | alasql('create database test' + test); 11 | alasql('use test' + test); 12 | }); 13 | 14 | after(function () { 15 | alasql('drop database test' + test); 16 | }); 17 | 18 | it('A) Export empty tables to excel sheets', function () { 19 | var res = []; 20 | var opts = [{sheetid: 'a'}, {sheetid: 'b'}]; 21 | res.push( 22 | alasql('SELECT INTO XLSX("' + __dirname + '/restest1109.xlsx",?) FROM ?', [opts, [[], []]]) 23 | ); 24 | assert.deepEqual(res, [1]); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test111.js: -------------------------------------------------------------------------------- 1 | // 2 | // tjsfiddle.js 3 | // Test for select 4 | // 5 | 6 | if (typeof exports === 'object') { 7 | var assert = require('assert'); 8 | var alasql = require('..'); 9 | } 10 | 11 | describe('Test from jsFiddle', function () { 12 | it('Simple select test (http://jsfiddle.net/agershun/38hj2uwy/3/)', function (done) { 13 | var db = new alasql.Database(); 14 | 15 | db.exec('CREATE TABLE person (name STRING, sex STRING, income INT)'); 16 | 17 | db.tables.person.data = [ 18 | {name: 'bill', sex: 'M', income: 50000}, 19 | {name: 'sara', sex: 'F', income: 100000}, 20 | ]; 21 | 22 | assert.deepEqual( 23 | [{name: 'sara', sex: 'F', income: 100000}], 24 | db.exec("SELECT * FROM person WHERE sex='F' AND income > 60000") 25 | ); 26 | done(); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /test/test112.js: -------------------------------------------------------------------------------- 1 | // 2 | // tselect01.js 3 | // Test for select 4 | // 5 | 6 | if (typeof exports === 'object') { 7 | var assert = require('assert'); 8 | var alasql = require('..'); 9 | } 10 | 11 | describe('SELECT #01', function () { 12 | it('Select *', function (done) { 13 | var db = new alasql.Database(); 14 | db.tables.one = {}; 15 | db.tables.one.data = [ 16 | {two: 1, three: 2}, 17 | {two: 4, three: 5}, 18 | ]; 19 | var res = db.exec('SELECT * FROM one'); 20 | assert.deepEqual(db.tables.one.data, res); 21 | done(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test121.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 121 - Views', function () { 7 | it('0. Create database', function (done) { 8 | alasql('create database test121'); 9 | alasql('use test121'); 10 | done(); 11 | }); 12 | 13 | it('1. CREATE VIEW', function (done) { 14 | alasql('create table one (a int, b int)'); 15 | alasql('insert into one values (1,10), (2,20), (3,30)'); 16 | 17 | alasql('create view two as select a from one'); 18 | // assert(!!alasql.databases.test121.tables.two); 19 | 20 | var res = alasql('select value sum(a) from two'); 21 | assert(res == 6); 22 | 23 | alasql('drop view two'); 24 | // assert(!alasql.databases.test121.tables.two); 25 | done(); 26 | }); 27 | 28 | it('Clear database', function (done) { 29 | alasql('drop database test121'); 30 | done(); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /test/test124.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 124 - column AS alias syntax', function () { 7 | it('1. Prepare database and select', function (done) { 8 | alasql('create database test124'); 9 | alasql('use test124'); 10 | alasql('create table one (a int, b int, c string)'); 11 | alasql('create table two (b int)'); 12 | alasql('insert into one values (1,1,1), (2,2,2), (4,4,4), (5,5,5), (6,6,6)'); 13 | alasql('insert into two values (1),(2),(3),(6)'); 14 | 15 | var res = alasql('select one.a q, two.b AS w from one join two using b'); 16 | 17 | assert.deepEqual(res, [ 18 | {q: 1, w: 1}, 19 | {q: 2, w: 2}, 20 | {q: 6, w: 6}, 21 | ]); 22 | alasql('drop database test124'); 23 | done(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /test/test1263.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 1263 - Nested SELECT', function () { 7 | var t1 = [ 8 | {id: '1', a: 'one'}, 9 | {id: '2', a: 'two'}, 10 | {id: '3', a: 'three'}, 11 | {id: '4', a: 'four'}, 12 | ]; 13 | var t2 = [ 14 | {id: '1', b: 'A'}, 15 | {id: '2', b: 'B'}, 16 | {id: '5', b: 'E'}, 17 | {id: '6', b: 'F'}, 18 | ]; 19 | 20 | it('1. JOIN', function (done) { 21 | var expected = [ 22 | {id: '1', a: 'one', b: 'A'}, 23 | {id: '2', a: 'two', b: 'B'}, 24 | {id: '3', a: 'three'}, 25 | {id: '4', a: 'four'}, 26 | {id: '5', b: 'E'}, 27 | {id: '6', b: 'F'}, 28 | ]; 29 | 30 | var res = alasql('SELECT * FROM ? T1 OUTER JOIN ? T2 ON T1.id = T2.id', [t1, t2]); 31 | assert.deepEqual(res, expected); 32 | 33 | var res = alasql('SELECT * FROM ? T1 OUTER JOIN (SELECT * FROM ?) T2 ON T1.id = T2.id', [ 34 | t1, 35 | t2, 36 | ]); 37 | assert.deepEqual(res, expected); 38 | done(); 39 | }); 40 | }); 41 | -------------------------------------------------------------------------------- /test/test127.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 127 SOURCE', function () { 9 | it('1. Load and run statements', function (done) { 10 | alasql('create database test127'); 11 | alasql('use test127'); 12 | alasql('source "' + __dirname + '/test127.sql"'); 13 | assert.deepEqual(Object.keys(alasql.databases.test127.tables), ['one']); 14 | done(); 15 | }); 16 | 17 | it('2. Test on loaded database', function (done) { 18 | var res = alasql('select * from one'); 19 | assert.deepEqual(res, [ 20 | {a: 1, bbb: 1, c: 1}, 21 | {a: 2, bbb: 2, c: 2}, 22 | ]); 23 | 24 | alasql('drop database test127'); 25 | done(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /test/test127.sql: -------------------------------------------------------------------------------- 1 | create table one (a int, b int, c string); 2 | insert into one values (1,1,1), (2,2,2); 3 | alter table one rename column b to bbb; 4 | 5 | -------------------------------------------------------------------------------- /test/test128.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 128 ASSERT', function () { 9 | it('1. Assert on SOURCE and run statements', function (done) { 10 | alasql('create database test128'); 11 | alasql('assert 1'); 12 | alasql('use test128'); 13 | alasql('assert 1'); 14 | alasql('source "' + __dirname + '/test128.sql"'); 15 | alasql('assert @[1,1,2,1,2,1]'); 16 | 17 | alasql('select * from one'); 18 | alasql('assert @[{a:1,bbb:1, c:1}, {a:2,bbb:2, c:2}]'); 19 | alasql('drop database test128'); 20 | 21 | alasql('assert 1'); 22 | done(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/test128.sql: -------------------------------------------------------------------------------- 1 | create table one (a int, b int, c string); 2 | assert 1; 3 | insert into one values (1,1,1), (2,2,2); 4 | assert 2; 5 | alter table one rename column b to bbb; 6 | assert 2; 7 | 8 | -------------------------------------------------------------------------------- /test/test131.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (false) { 9 | describe('Test 131 CAST and CONVERT', function () { 10 | it('1. CAST', function (done) { 11 | alasql('source "' + __dirname + '/test131.sql"'); 12 | done(); 13 | }); 14 | 15 | it('2. CAST dates', function (done) { 16 | alasql.options.datetimeformat = 'javascript'; 17 | var res = alasql.value('select cast("1998-01-01" as date)'); 18 | assert.equal(typeof res, 'object'); 19 | assert(res instanceof Date); 20 | assert(res.valueOf(), new Date('1998-01-01').valueOf()); 21 | 22 | alasql.options.datetimeformat = 'sql'; 23 | var res = alasql.value('select cast("1998-01-01" as date)'); 24 | assert.equal(res, '1998-01-01'); 25 | done(); 26 | }); 27 | }); 28 | } 29 | -------------------------------------------------------------------------------- /test/test131.sql: -------------------------------------------------------------------------------- 1 | -- Test 131 - CAST and CONVERT 2 | select cast(1234 as int); 3 | assert @[{"CAST(1234 AS INT)":1234}]; 4 | /* comment */ 5 | select cast(12.34 as int); 6 | assert @[{"CAST(12.34 AS INT)":12}]; 7 | 8 | select cast("1234" as int); 9 | assert @[{"CAST('1234' AS INT)":1234}]; 10 | select cast('1234' as int); 11 | assert @[{"CAST('1234' AS INT)":1234}]; 12 | select cast("12.34" as int); 13 | assert @[{"CAST('12.34' AS INT)":12}]; 14 | 15 | select cast("1234" as number); 16 | assert @[{"CAST('1234' AS NUMBER)":1234}]; 17 | select cast("12.34" as number); 18 | assert @[{"CAST('12.34' AS NUMBER)":12.34}]; 19 | 20 | select cast(1234 as string); 21 | assert @[{"CAST(1234 AS STRING)":"1234"}]; 22 | select cast(12.34 as string); 23 | assert @[{"CAST(12.34 AS STRING)":"12.34"}]; 24 | 25 | select convert(int,12.34); 26 | assert @[{"CAST(12.34 AS INT)":12}]; 27 | -- assert [{"CONVERT(INT,12.34)":12}]; -------------------------------------------------------------------------------- /test/test134.csv: -------------------------------------------------------------------------------- 1 | "a","b" 2 | 10,"Ten" 3 | 20,"Twenty" -------------------------------------------------------------------------------- /test/test134.tab: -------------------------------------------------------------------------------- 1 | 50 Fifty 2 | 60 Sixty -------------------------------------------------------------------------------- /test/test135.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (false) { 9 | describe('Test 135 a la NoSQL', function () { 10 | var test135; 11 | it('1. Insert NoSQL', function (done) { 12 | var test135 = alasql.create('test135'); 13 | var one = test135.create('one'); 14 | one.insert({a: 1, b: 2}, function (res) { 15 | assert(res == 1); 16 | one.find({a: 1}, function (res) { 17 | assert.deepEqual(res, {a: 1, b: 2}); 18 | done(); 19 | }); 20 | }); 21 | }); 22 | 23 | it('99. Clear database', function (done) { 24 | test135.drop(); 25 | done(); 26 | }); 27 | }); 28 | } 29 | -------------------------------------------------------------------------------- /test/test136.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (false) { 9 | describe('Test 136 get JSON property', function () { 10 | it('1. Get element of object and Array', function (done) { 11 | var res = alasql('SELECT * FROM JSON([{a:1,b:[3,4]},{e:1}]) WHERE b->[1] = 4'); 12 | assert.deepEqual(res, [{a: 1, b: [3, 4]}]); 13 | 14 | var res = alasql('SELECT * FROM JSON([{a:1,b:[3,4]},{e:1}]) WHERE b == JSON([3,4])'); 15 | assert.deepEqual(res, [{a: 1, b: [3, 4]}]); 16 | 17 | var res = alasql('SELECT * FROM JSON([{a:1,b:[3,4]},{e:1}]) WHERE e = 1'); 18 | assert.deepEqual(res, [{e: 1}]); 19 | 20 | done(); 21 | }); 22 | }); 23 | } 24 | -------------------------------------------------------------------------------- /test/test1400a.csv: -------------------------------------------------------------------------------- 1 | Payment Method,Account Number,Account Name,Corporate Account 2 | Method 3,07312512451,Account 3,False 3 | Method 4,08831502151,Account 4,True 4 | Method 1,51235123124,Account 1,True 5 | Method 2,88311052124,Account 2,False 6 | -------------------------------------------------------------------------------- /test/test1400b.csv: -------------------------------------------------------------------------------- 1 | Method 3,07312512451,Account 3,False 2 | Method 4,08831502151,Account 4,True 3 | Method 1,51235123124,Account 1,True 4 | Method 2,88311052124,Account 2,False 5 | -------------------------------------------------------------------------------- /test/test1415.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 1415 - UNION Expression with empty query columns bug', function () { 9 | it('1. should not insert empty objects in results when using UNION Expression', function (done) { 10 | var data1 = [{a: 'abc'}, {a: 'xyz'}]; 11 | var data2 = [{a: '123'}, {a: '987'}]; 12 | 13 | var res = alasql('SELECT * FROM :a UNION SELECT * FROM :b', {a: data1, b: data2}); 14 | assert.deepEqual(res, [{a: '123'}, {a: '987'}, {a: 'abc'}, {a: 'xyz'}]); 15 | 16 | var res = alasql( 17 | 'SELECT * FROM @[{x: true}, {x: 3}] UNION SELECT * FROM @[{x: false}, {x: 9}]' 18 | ); 19 | assert.deepEqual(res, [{x: false}, {x: 9}, {x: true}, {x: 3}]); 20 | 21 | done(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test148.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 148 - EXPLAIN SELECT', function () { 9 | it('1. Simple Select', function (done) { 10 | alasql('CREATE DATABASE test148; USE test148'); 11 | alasql('CREATE TABLE one (a INT)'); 12 | alasql('INSERT INTO one VALUES (1),(2),(3)'); 13 | var res = alasql('EXPLAIN SELECT * FROM one WHERE a IN (SELECT * FROM one) ORDER BY a'); 14 | // console.table(res); 15 | done(); 16 | }); 17 | 18 | it('99. Detach database', function (done) { 19 | alasql('DROP DATABASE test148'); 20 | done(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test149.json: -------------------------------------------------------------------------------- 1 | { 2 | "alasql": "{\"databases\":{}}" 3 | } 4 | -------------------------------------------------------------------------------- /test/test150.json: -------------------------------------------------------------------------------- 1 | { 2 | "alasql": "{\"databases\":{}}" 3 | } 4 | -------------------------------------------------------------------------------- /test/test151.json: -------------------------------------------------------------------------------- 1 | { 2 | "alasql": "{\"databases\":{\"ls151\":true}}", 3 | "ls151": "{\"databaseid\":\"ls151\",\"tables\":{\"one\":true}}", 4 | "ls151.one": "{\"columns\":[{\"columnid\":\"a\",\"dbtypeid\":\"INT\"},{\"columnid\":\"b\",\"dbtypeid\":\"STRING\"}],\"data\":[{\"a\":1,\"b\":\"Moscow\"},{\"a\":2,\"b\":\"Kyiv\"},{\"a\":3,\"b\":\"Minsk\"}],\"identities\":{}}" 5 | } 6 | -------------------------------------------------------------------------------- /test/test1526.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 1645', function () { 7 | it('Captures error when callback for user function error', done => { 8 | try { 9 | alasql('SELECT medain(8) ', (data, err) => { 10 | if (err) done(); 11 | }); 12 | } catch (e) { 13 | throw 'error'; 14 | } 15 | }); 16 | 17 | it('Throws error when callback for user function error', done => { 18 | try { 19 | alasql('SELECT medain(8)'); 20 | } catch (e) { 21 | done(); 22 | } 23 | 24 | throw 'error'; 25 | }); 26 | 27 | it('Catches error when promise for user function error', done => { 28 | alasql.promise('SELECT medain(8)').catch(() => done()); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/test153.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (typeof exports != 'object') { 9 | describe('Test 153 - Async test1...', function () { 10 | it('1. Create database', function (done) { 11 | alasql('CREATE DATABASE IF NOT EXISTS test153'); 12 | alasql('CREATE TABLE test153.one (a int)'); 13 | var getfn = function (i, cb) { 14 | if (i > 3) return; 15 | var res = {a: i}; 16 | //cb(res); 17 | return res; 18 | }; 19 | var res = alasql('SELECT * FROM ?', [getfn]); 20 | assert(res.length == 4); 21 | 22 | var res = alasql('SELECT * FROM ?', [getfn], function (res) { 23 | assert(res.length == 4); 24 | done(); 25 | }); 26 | 27 | // No params 28 | var res = alasql('VALUE OF SELECT 123', function (res) { 29 | assert.equal(123, res); 30 | done(); 31 | }); 32 | }); 33 | 34 | it('99. Detach database', function (done) { 35 | alasql('DROP DATABASE test153'); 36 | done(); 37 | }); 38 | }); 39 | } 40 | -------------------------------------------------------------------------------- /test/test155.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (typeof exports != 'object') { 9 | describe('Test 155 - InsexedDB INSERT', function () { 10 | it('1. Multiple lines async', function (done) { 11 | alasql( 12 | 'DROP IndexedDB DATABASE IF EXISTS ag155;' + 13 | 'CREATE IndexedDB DATABASE ag155;' + 14 | 'ATTACH IndexedDB DATABASE ag155 AS test155;' + 15 | 'CREATE TABLE test155.one;' + 16 | 'CREATE TABLE test155.two;' + 17 | 'SELECT * INTO test155.one FROM ?;' + 18 | 'SELECT * FROM test155.one' + 19 | '', 20 | [[{a: 1}, {a: 2}]], 21 | function (res) { 22 | // console.trace(); 23 | // console.log(res); 24 | assert.deepEqual(res, [1, 1, 1, 1, 1, 2, [{a: 1}, {a: 2}]]); 25 | done(); 26 | } 27 | ); 28 | }); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /test/test157.json: -------------------------------------------------------------------------------- 1 | [{"a": 1}, {"a": 2}] 2 | -------------------------------------------------------------------------------- /test/test157.txt: -------------------------------------------------------------------------------- 1 | Andorra 2 | Madrid 3 | Milano 4 | Minsk 5 | Moscow 6 | Paris 7 | Riga 8 | Rome 9 | -------------------------------------------------------------------------------- /test/test157a.csv: -------------------------------------------------------------------------------- 1 | Vitebsk,200 2 | Bishkek,50 3 | Almaty,30 4 | Astana,400 5 | Tokyo,700 -------------------------------------------------------------------------------- /test/test157a.tab: -------------------------------------------------------------------------------- 1 | Vitebsk 200 2 | Bishkek 50 3 | Almaty 30 4 | Astana 400 5 | Tokyo 700 -------------------------------------------------------------------------------- /test/test157b.csv: -------------------------------------------------------------------------------- 1 | city,population 2 | Vitebsk,200 3 | Bishkek,50 4 | Almaty,30 5 | Astana,400 6 | Tokyo,700 -------------------------------------------------------------------------------- /test/test157b.tab: -------------------------------------------------------------------------------- 1 | city population 2 | Vitebsk 200 3 | Bishkek 50 4 | Almaty 30 5 | Astana 400 6 | Tokyo 700 -------------------------------------------------------------------------------- /test/test159.json: -------------------------------------------------------------------------------- 1 | { 2 | "alasql": "{\"databases\":{}}" 3 | } 4 | -------------------------------------------------------------------------------- /test/test160.txt: -------------------------------------------------------------------------------- 1 | New York 2 | Madrid 3 | London 4 | Mogadishu 5 | Barcelona 6 | Warsaw 7 | Minsk 8 | -------------------------------------------------------------------------------- /test/test162.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | var DOMStorage = require('dom-storage'); 5 | global.localStorage = new DOMStorage('./test162.json', { 6 | strict: false, 7 | ws: '', 8 | }); 9 | } else { 10 | __dirname = '.'; 11 | } 12 | 13 | describe('Test 162 - PRIMARY & FOREIGN KEYS in memory, localStorage & IndexedDB', function () { 14 | it('1. ...', function (done) { 15 | // TODO - finish the test 16 | done(); 17 | }); 18 | }); 19 | 20 | //} 21 | -------------------------------------------------------------------------------- /test/test162.json: -------------------------------------------------------------------------------- 1 | { 2 | "alasql": "{\"databases\":{}}" 3 | } 4 | -------------------------------------------------------------------------------- /test/test164.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | var DOMStorage = require('dom-storage'); 5 | global.localStorage = new DOMStorage('./test162.json', { 6 | strict: false, 7 | ws: '', 8 | }); 9 | } else { 10 | __dirname = '.'; 11 | } 12 | 13 | if (typeof exports === 'object') { 14 | describe('Test 164 - NeDB', function () { 15 | it('1. NeDB support', function (done) { 16 | // TODO - finish the test 17 | done(); 18 | }); 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /test/test1645.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 1645', function () { 7 | it('variable assigned from query should work properly', () => { 8 | var sql = ` 9 | CREATE TABLE cities (city string, population number); 10 | INSERT INTO cities VALUES ('Rome',2863223),('Paris',2249975),('Berlin',3517424), ('Madrid',3041579); 11 | SELECT * FROM cities WHERE population < 3500000 ORDER BY population DESC; 12 | declare @X NUMBER = (select MAX(population) from cities);`; 13 | 14 | alasql(sql); 15 | var x = alasql.vars.X; 16 | assert.equal(x, 3517424); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /test/test167.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | var DOMStorage = require('dom-storage'); 5 | global.localStorage = new DOMStorage('./test162.json', { 6 | strict: false, 7 | ws: '', 8 | }); 9 | } else { 10 | __dirname = '.'; 11 | } 12 | 13 | if (typeof exports === 'object' && false) { 14 | describe('Test 167 - database in database', function () { 15 | it('1. Temporary tables', function (done) { 16 | var res = alasql('insert into #city values {city:"Oslo"}, {city:"Helsinki"}'); 17 | assert.deepEqual(alasql.temp.city, [{city: 'Oslo'}, {city: 'Helsinki'}]); 18 | 19 | var res = alasql('select * from #city where city like "Os%"'); 20 | assert.deepEqual(res, [{city: 'Oslo'}]); 21 | 22 | var res = alasql('select * into #sweden_capital from #city where city like "Os%"'); 23 | assert.equal(res, 1); 24 | assert.deepEqual(alasql.templ.sweden_capital, [{city: 'Oslo'}]); 25 | 26 | // TODO - finish the test 27 | done(); 28 | }); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /test/test168.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test168.xls -------------------------------------------------------------------------------- /test/test168.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test168.xlsx -------------------------------------------------------------------------------- /test/test169.txt: -------------------------------------------------------------------------------- 1 | Hello 2 | World! -------------------------------------------------------------------------------- /test/test169a.csv: -------------------------------------------------------------------------------- 1 | a,b 2 | Hello,Warsaw 3 | World!,Quito 4 | -------------------------------------------------------------------------------- /test/test169a.tab: -------------------------------------------------------------------------------- 1 | Hello Warsaw 2 | World! Quito 3 | -------------------------------------------------------------------------------- /test/test169b.tab: -------------------------------------------------------------------------------- 1 | a b 2 | Hello Warsaw 3 | World! Quito 4 | -------------------------------------------------------------------------------- /test/test170.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports === 'object' && false) { 9 | 10 | describe('Test 170 - INTO result variable', function () { 11 | it('1. Write TXT file into stdout', function (done) { 12 | var data = [ 13 | {city: 'Rome', population: 3400000}, 14 | {city: 'Astana', population: 800000}, 15 | ]; 16 | var res = alasql('select * into txt() from ?', [data], function (res) { 17 | assert(res == 'Rome\nAstana'); 18 | done(); 19 | }); 20 | }); 21 | 22 | it('2. Write CSV file into stdout', function (done) { 23 | var data = [ 24 | {city: 'Rome', population: 3400000}, 25 | {city: 'Astana', population: 800000}, 26 | ]; 27 | var res = alasql( 28 | 'select * into csv({headers:true, utf8Bom:false}) from ?', 29 | [data], 30 | function (res) { 31 | assert.equal(res, '"city";"population"\r\n"Rome";3400000\r\n"Astana";800000\r\n'); 32 | done(); 33 | } 34 | ); 35 | }); 36 | }); 37 | //} 38 | -------------------------------------------------------------------------------- /test/test172.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 172 - XLSX to array', function () { 11 | it('1. Load XLSX file into array', function (done) { 12 | var data = []; 13 | alasql( 14 | 'select column * from xlsx("' + 15 | __dirname + 16 | '/test168.xlsx", {headers:true, sheetid:"Sheet1", range:"A1:B6"}) order by City', 17 | [], 18 | function (res) { 19 | // console.log(res); 20 | assert.deepEqual(res, ['Kyoto', 'Mexico', 'Minsk', 'Moscow', 'Tokyo']); 21 | done(); 22 | } 23 | ); 24 | }); 25 | }); 26 | 27 | //}; 28 | -------------------------------------------------------------------------------- /test/test173.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 173 - SELECT Short Syntax', function () { 11 | if (false) { 12 | it('1. FROM without select', function (done) { 13 | var data = [{a: 1}, {a: 2}, {a: 3}]; 14 | alasql('FROM ?', [data], function (res) { 15 | /// console.log(res); 16 | assert.deepEqual(res, [{a: 1}, {a: 2}, {a: 3}]); 17 | done(); 18 | }); 19 | }); 20 | } 21 | }); 22 | 23 | //}; 24 | -------------------------------------------------------------------------------- /test/test176a.tab: -------------------------------------------------------------------------------- 1 | Country City 2 | Kazakhstan Astana 3 | "Kazakhstan" Almaty 4 | Russia "Moscow" 5 | "Germany Berlin" Shonefeld 6 | 7 | 8 | -------------------------------------------------------------------------------- /test/test176b.csv: -------------------------------------------------------------------------------- 1 | Country;City 2 | Kazakhstan;Astana 3 | "Kazakhstan";Almaty 4 | Russia;"Moscow" 5 | "Germany ;Berlin";Shonefeld -------------------------------------------------------------------------------- /test/test176c.csv: -------------------------------------------------------------------------------- 1 | Country,City 2 | 'Kazakhstan,Astana',Almaty 3 | 4 | -------------------------------------------------------------------------------- /test/test176d.csv: -------------------------------------------------------------------------------- 1 | Name,Emails 2 | John,"email@example.com, email2@example.com, email3@example.com" 3 | Batman,"batman@yahoo.com, batman@hotbox.com" 4 | Captain America,"captain@america.net" 5 | mary Kay,"marykay@cosmetics.com, marykay@facebook.com" -------------------------------------------------------------------------------- /test/test177.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 177 - AVG', function () { 11 | var data = [{a: 1}, {a: 2}, {a: 3}]; 12 | 13 | it('1. AVG', function (done) { 14 | var res = alasql('SELECT COUNT(*) AS cnt, SUM(a) AS sm FROM ?', [data]); 15 | assert(2 == res[0].sm / res[0].cnt); 16 | done(); 17 | }); 18 | 19 | it('2. AVG', function (done) { 20 | var res = alasql('SELECT VALUE AVG(a) FROM ?', [data]); 21 | // console.log(2, res); 22 | assert(res == 2); 23 | done(); 24 | }); 25 | 26 | if (false) { 27 | it('3. AGGR', function (done) { 28 | var res = alasql('SELECT COUNT(*) AS cnt, SUM(a) AS sm, AGGR(sm/cnt) AS av FROM ?', [data]); 29 | // var res = alasql('SELECT COUNT(*) AS cnt, SUM(a) AS sm, AGGR(COUNT(*)/SUM(a)) AS av FROM ?',[data]); 30 | /// console.log(3, res); 31 | assert(2 == res[0].av); 32 | done(); 33 | }); 34 | } 35 | }); 36 | -------------------------------------------------------------------------------- /test/test178.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 178 - function in GROUP BY', function () { 11 | var city = [ 12 | {city: 'Moscow', continent: 'Europe'}, 13 | {city: 'Kyiv', continent: 'Europe'}, 14 | {city: 'Minsk', continent: 'Europe'}, 15 | {city: 'Madrid', continent: 'Europe'}, 16 | {city: 'Beijing', continent: 'Asia'}, 17 | {city: 'Tokyo', continent: 'Asia'}, 18 | ]; 19 | 20 | it('1. Default select from GROUP BY clause', function (done) { 21 | // var res = alasql('SELECT COUNT(*) AS cnt FROM ? GROUP BY MID(city,1,1), city',[city]); 22 | var res = alasql('SELECT continent, COUNT(*) FROM ? GROUP BY continent', [city]); 23 | assert.deepEqual(res, [ 24 | {continent: 'Europe', 'COUNT(*)': 4}, 25 | {continent: 'Asia', 'COUNT(*)': 2}, 26 | ]); 27 | // console.log(res); 28 | done(); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/test1796.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 1796 Multi-line comments', function () { 9 | it('1. /* */ and -- style comments', function (done) { 10 | var res = alasql.utils.uncomment('one /* two \n three */ four \n five -- six\nseven'); 11 | // console.log(res); 12 | assert.equal(res, 'one four \n five \nseven'); 13 | done(); 14 | }); 15 | 16 | it('2. /* */', function (done) { 17 | var res = alasql.utils.uncomment('SELECT /* xxx */ VALUE /* blahblah \n tuturututu */ 1'); 18 | // console.log(res); 19 | assert.equal(res, 'SELECT VALUE 1'); 20 | done(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test180.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 180 - Array as a source', function () { 11 | var array = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]; 12 | var array2 = [0, 1, 2, 3]; 13 | 14 | it('1. SELECT', function (done) { 15 | var res = alasql('SELECT COLUMN * FROM [?] ORDER BY [0]', [array]); 16 | // console.log(res); 17 | assert.deepEqual(res, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); 18 | done(); 19 | }); 20 | 21 | it('2. JOIN', function (done) { 22 | var res = alasql('SELECT COLUMN * FROM [?] AS a OUTER JOIN [?] AS b ON a.[0] = b.[0]', [ 23 | array, 24 | array2, 25 | ]); 26 | // console.log(res); 27 | // assert.deepEqual(res,[1,2,3,4,5,6,7,8,9,10]); 28 | done(); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/test181.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 181 - ARRAY aggregator', function () { 11 | it('1. ARRAY()', function (done) { 12 | var food = [ 13 | {food: 'apple', type: 'fruit'}, 14 | {food: 'potato', type: 'vegetable'}, 15 | {food: 'banana', type: 'fruit'}, 16 | ]; 17 | var res = alasql('SELECT ARRAY(food) AS foods FROM ? GROUP BY type', [food]); 18 | // console.log(res); 19 | assert.deepEqual(res, [{foods: ['apple', 'banana']}, {foods: ['potato']}]); 20 | done(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test1820.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 1820 - SELECT query (a AS b, b AS c)', function () { 9 | it('1. Select query where alias of one column is also a column name in the result set', function (done) { 10 | let item1 = {a: 1, b: 'hello'}; 11 | let item2 = {a: 2, b: ''}; 12 | 13 | var res = alasql('SELECT a as b, b as c FROM ? GROUP BY a,b', [[item1, item2]]); 14 | 15 | assert.deepEqual(res, [ 16 | { 17 | b: 1, 18 | c: 'hello', 19 | }, 20 | { 21 | b: 2, 22 | c: '', 23 | }, 24 | ]); 25 | 26 | done(); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /test/test187.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 187 - Calculation of PI', function () { 11 | it('1. RANGE()', function (done) { 12 | var n = 10; 13 | // var res = alasql('SELECT COUNT(*) as cnt, VALUE AGGR(cnt/$[0]*4) as pi FROM (SELECT random() as x, random() as y FROM RANGE(1,$[0])) WHERE x*x+y*y<1', 14 | // [n]); 15 | // console.log(res); 16 | 17 | //var res = alasql('SELECT COUNT(*) as cnt, AGGR(cnt/$[0]*4) as pi, random() as x, random() as y FROM RANGE(1,$[0]) WHERE x*x+y*y<1', 18 | // [n]); 19 | var res = alasql( 20 | 'SELECT * FROM (SELECT random() AS x, random() AS y FROM RANGE(1,10)) WHERE x*x+y*y<1', 21 | [n] 22 | ); 23 | // console.log(res); 24 | // assert(res.length == 10); 25 | done(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /test/test1871.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 1871 - n.Term is not a constructor', function () { 7 | it('Sending xxx random data should give valid error', function () { 8 | assert.throws(() => alasql('xxx'), { 9 | message: "Parse error on line 1:\nxxx\n---^\nExpecting 'COLONDASH', got 'EOF'", 10 | }); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /test/test188.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 188 - Calculation of PI', function () { 11 | it('1. EMPTY', function (done) { 12 | // var n = 10; 13 | // var res = alasql('SELECT COUNT(*) as cnt, VALUE AGGR(cnt/$[0]*4) as pi FROM (SELECT random() as x, random() as y FROM RANGE(1,$[0])) WHERE x*x+y*y<1', 14 | // [n]); 15 | // console.log(res); 16 | 17 | //var res = alasql('SELECT COUNT(*) as cnt, AGGR(cnt/$[0]*4) as pi, random() as x, random() as y FROM RANGE(1,$[0]) WHERE x*x+y*y<1', 18 | // [n]); 19 | // var res = alasql('SELECT * FROM (SELECT random() AS x, random() AS y FROM RANGE(1,10)) WHERE x*x+y*y<1',[n]); 20 | // console.log(res); 21 | done(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test189.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (typeof exports == 'object') { 9 | describe('Test 189 - SELECT INTO SQL()', function () { 10 | it('1. From ?', function (done) { 11 | var data = [ 12 | {a: 1, b: 'Ten'}, 13 | {a: 2, b: 'Twenty'}, 14 | {a: 3, b: "Val's Deser"}, 15 | ]; 16 | alasql( 17 | 'SELECT * INTO SQL("' + __dirname + '/test189.sql",{tableid:"one"}) FROM ?', 18 | [data], 19 | function () { 20 | alasql( 21 | 'CREATE DATABASE test189;\ 22 | USE test189;\ 23 | CREATE TABLE one; \ 24 | SOURCE "' + 25 | __dirname + 26 | '/test189.sql"; \ 27 | SELECT * FROM one', 28 | [], 29 | function (res) { 30 | assert.deepEqual(res.pop(), data); 31 | alasql('DROP DATABASE test189'); 32 | done(); 33 | } 34 | ); 35 | } 36 | ); 37 | }); 38 | }); 39 | } 40 | -------------------------------------------------------------------------------- /test/test189.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO one(a,b) VALUES (1,'Ten'); 2 | INSERT INTO one(a,b) VALUES (2,'Twenty'); 3 | INSERT INTO one(a,b) VALUES (3,'Val''s Deser'); 4 | -------------------------------------------------------------------------------- /test/test1898.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 1898 - group concat', function () { 7 | let data; 8 | let res; 9 | 10 | it('A) int concat', function () { 11 | data = [ 12 | {a: 1, b: 10}, 13 | {a: 2, b: 20}, 14 | {a: 1, b: 30}, 15 | ]; 16 | res = alasql('SELECT a, group_concat(b) AS b FROM ? GROUP BY a', [data]); 17 | assert.equal(res[0].b, '10,30'); 18 | assert.equal(res[1].b, '20'); 19 | }); 20 | 21 | it('B) string values', function () { 22 | data = [ 23 | {a: 1, b: 'x'}, 24 | {a: 2, b: 'y'}, 25 | {a: 1, b: 'z'}, 26 | ]; 27 | res = alasql('SELECT a, GROUP_CONCAT(b) AS b FROM ? GROUP BY a', [data]); 28 | assert.equal(res[0].b, 'x,z'); 29 | assert.equal(res[1].b, 'y'); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/test190.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 190 - SELECT TOP 10 PERCENT FROM ?', function () { 11 | it('1. From ?', function (done) { 12 | var data = []; 13 | for (var i = 0; i < 200; i++) { 14 | data.push({a: i}); 15 | } 16 | var res = alasql('SELECT TOP 5 PERCENT * FROM ? ORDER BY a DESC ', [data]); 17 | assert.deepEqual(res, [ 18 | {a: 199}, 19 | {a: 198}, 20 | {a: 197}, 21 | {a: 196}, 22 | {a: 195}, 23 | {a: 194}, 24 | {a: 193}, 25 | {a: 192}, 26 | {a: 191}, 27 | {a: 190}, 28 | ]); 29 | done(); 30 | }); 31 | 32 | it('2. From ?', function (done) { 33 | var data = []; 34 | for (var i = 0; i < 200; i++) { 35 | data.push(i); 36 | } 37 | var res = alasql('SELECT COLUMN TOP 5 PERCENT _ FROM ? ORDER BY _ DESC ', [data]); 38 | assert.deepEqual(res, [199, 198, 197, 196, 195, 194, 193, 192, 191, 190]); 39 | done(); 40 | }); 41 | }); 42 | -------------------------------------------------------------------------------- /test/test191.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 191 - SELECT and GROUP BY execution order', function () { 11 | it('1. NO GROUP BY', function (done) { 12 | var data = [{a: 1}, {a: 1}, {a: 2}, {a: 3}, {a: 1}, {a: 2}]; 13 | var res = alasql('SELECT a, a+1 AS b FROM ?', [data]); 14 | // console.log(res); 15 | done(); 16 | }); 17 | 18 | it('1. From ?', function (done) { 19 | var data = [{a: 1}, {a: 1}, {a: 2}, {a: 3}, {a: 1}, {a: 2}]; 20 | var res = alasql('SELECT a, COUNT(*) AS b FROM ? GROUP BY a', [data]); 21 | // console.log(res); 22 | done(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/test1919.jsonl: -------------------------------------------------------------------------------- 1 | {"a":"foo","b":5.0,"c":true,"d":null} 2 | {"a":"bar","b":8.0,"c":false,"d":null} 3 | -------------------------------------------------------------------------------- /test/test1919.ndjson: -------------------------------------------------------------------------------- 1 | {"a":"foo","b":5.0,"c":true,"d":null} 2 | {"a":"bar","b":8.0,"c":false,"d":null} 3 | -------------------------------------------------------------------------------- /test/test192.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 192 - ORDER BY formula', function () { 11 | it('1. ORDER BY column', function (done) { 12 | var data = [{a: 1}, {a: 1}, {a: 2}, {a: 3}, {a: 1}, {a: 2}]; 13 | var res = alasql('SELECT a FROM ? ORDER BY 1-a', [data]); 14 | assert.deepEqual(res, [{a: 3}, {a: 2}, {a: 2}, {a: 1}, {a: 1}, {a: 1}]); 15 | done(); 16 | }); 17 | it('2. ORDER BY column', function (done) { 18 | var data = [{a: 'One'}, {a: 'Two'}, {a: 'Three'}, {a: 'Four'}]; 19 | var res = alasql('SELECT a FROM ? ORDER BY MID(a,2,1)', [data]); 20 | assert.deepEqual(res, [{a: 'Three'}, {a: 'One'}, {a: 'Four'}, {a: 'Two'}]); 21 | done(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test194.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 194 - HAVING with aggregator', function () { 11 | // console.log(alasql.parse('SELECT a FROM ? GROUP BY a % 2').toString()); 12 | 13 | it('1. HAVING with aggregator', function (done) { 14 | var data = [{a: 1}, {a: 1}, {a: 2}, {a: 3}, {a: 1}, {a: 2}]; 15 | var res = alasql('SELECT a FROM ? GROUP BY a HAVING COUNT(*)>1 ORDER BY a', [data]); 16 | assert.deepEqual(res, [{a: 1}, {a: 2}]); 17 | // console.log('Result:',res); 18 | done(); 19 | }); 20 | /* 21 | it("2. GROUP BY formula", function(done) { 22 | var data = [{a:1},{a:1},{a:2},{a:3},{a:1},{a:2}]; 23 | var res = alasql('SELECT a FROM ? GROUP BY CUBE(a,a%2)',[data]); 24 | /// console.log(res); 25 | done(); 26 | }); 27 | */ 28 | }); 29 | -------------------------------------------------------------------------------- /test/test195.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 195 - HAVING with aggregator', function () { 11 | // console.log(alasql.parse('SELECT a FROM ? GROUP BY a % 2').toString()); 12 | 13 | it('1. HAVING with aggregator', function (done) { 14 | var data = [{a: 1}, {a: 1}, {a: 2}, {a: 3}, {a: 1}, {a: 2}]; 15 | var res = alasql('SELECT a FROM ? GROUP BY a HAVING COUNT(*)>1', [data]); 16 | // console.log('Result:',res); 17 | done(); 18 | }); 19 | /* 20 | it("2. GROUP BY formula", function(done) { 21 | var data = [{a:1},{a:1},{a:2},{a:3},{a:1},{a:2}]; 22 | var res = alasql('SELECT a FROM ? GROUP BY CUBE(a,a%2)',[data]); 23 | /// console.log(res); 24 | done(); 25 | }); 26 | */ 27 | }); 28 | -------------------------------------------------------------------------------- /test/test196.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 196 - COUNT(a) vs COUNT(*)', function () { 11 | // console.log(alasql.parse('SELECT a FROM ? GROUP BY a % 2').toString()); 12 | 13 | it('1. COUNT(*) vs COUNT(a)', function (done) { 14 | var data = [{a: 1}, {a: 1}, {a: 2}, {a: 3}, {a: 1}, {a: 2}, {a: undefined}]; 15 | var res = alasql('SELECT a, COUNT(*) as b, COUNT(a) as c FROM ? GROUP BY a', [data]); 16 | assert.deepEqual(res, [ 17 | {a: 1, b: 3, c: 3}, 18 | {a: 2, b: 2, c: 2}, 19 | {a: 3, b: 1, c: 1}, 20 | {a: undefined, b: 1, c: 0}, 21 | ]); 22 | // console.log(res); 23 | done(); 24 | }); 25 | 26 | it('2. COUNT(DISTINCT a)', function (done) { 27 | var data = [{a: 1}, {a: 1}, {a: 2}, {a: 3}, {a: 1}, {a: 2}]; 28 | var res = alasql('SELECT COUNT(DISTINCT a) FROM ?', [data]); 29 | // console.log(res); 30 | done(); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /test/test197.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | //if(typeof exports != 'object') { 9 | 10 | describe('Test 197 - Expression in expression', function () { 11 | // console.log(alasql.parse('SELECT a FROM ? GROUP BY a % 2').toString()); 12 | 13 | it('1. MAX', function (done) { 14 | // var ast = alasql.parse('SELECT (SELECT MAX(a) FROM ?) FROM RANGE(1,2)'); 15 | // console.log(ast.toString()); 16 | // console.log(ast); 17 | 18 | var data = [{a: 1}, {a: 1}, {a: 2}, {a: 3}, {a: 1}, {a: 2}]; 19 | var res = alasql('SELECT (SELECT * FROM ?)+1 FROM RANGE(1,2)', [data]); 20 | //console.log(res); 21 | done(); 22 | }); 23 | /* 24 | it("2. GROUP BY formula", function(done) { 25 | var data = [{a:1},{a:1},{a:2},{a:3},{a:1},{a:2}]; 26 | var res = alasql('SELECT a FROM ? GROUP BY CUBE(a,a%2)',[data]); 27 | /// console.log(res); 28 | done(); 29 | }); 30 | */ 31 | }); 32 | -------------------------------------------------------------------------------- /test/test198-1.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS Orders; 2 | DROP TABLE IF EXISTS Customers; 3 | CREATE TABLE Customers 4 | ( 5 | customerid CHAR(5) NOT NULL PRIMARY KEY, 6 | city VARCHAR(10) NOT NULL 7 | ); 8 | INSERT INTO Customers(customerid, city) VALUES('FISSA', 'Madrid'); 9 | INSERT INTO Customers(customerid, city) VALUES('FRNDO', 'Madrid'); 10 | INSERT INTO Customers(customerid, city) VALUES('KRLOS', 'Madrid'); 11 | INSERT INTO Customers(customerid, city) VALUES('MRPHS', 'Zion'); 12 | CREATE TABLE Orders 13 | ( 14 | orderid INT NOT NULL PRIMARY KEY, 15 | customerid CHAR(5) NULL REFERENCES Customers(customerid) 16 | ); 17 | INSERT INTO Orders(orderid, customerid) VALUES(1, 'FRNDO'); 18 | INSERT INTO Orders(orderid, customerid) VALUES(2, 'FRNDO'); 19 | INSERT INTO Orders(orderid, customerid) VALUES(3, 'KRLOS'); 20 | INSERT INTO Orders(orderid, customerid) VALUES(4, 'KRLOS'); 21 | INSERT INTO Orders(orderid, customerid) VALUES(5, 'KRLOS'); 22 | INSERT INTO Orders(orderid, customerid) VALUES(6, 'MRPHS'); 23 | INSERT INTO Orders(orderid, customerid) VALUES(7, NULL); 24 | -------------------------------------------------------------------------------- /test/test198-2.sql: -------------------------------------------------------------------------------- 1 | SELECT C.customerid, COUNT(O.orderid) AS numorders 2 | FROM Customers AS C 3 | LEFT OUTER JOIN Orders AS O 4 | ON C.customerid = O.customerid 5 | WHERE C.city = 'Madrid' 6 | GROUP BY C.customerid 7 | HAVING COUNT(O.orderid) < 3 8 | ORDER BY numorders; -------------------------------------------------------------------------------- /test/test1983.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | const test = '1983'; // insert test file number 7 | 8 | describe('Test 1983 - multiple statements', function () { 9 | before(function () { 10 | alasql('create database test' + test); 11 | alasql('use test' + test); 12 | alasql('CREATE TABLE a (anything string);'); 13 | }); 14 | 15 | after(function () { 16 | alasql('drop database test' + test); 17 | }); 18 | 19 | it('USING followed by name', function () { 20 | assert.doesNotThrow(() => alasql('SELECT * FROM a a1 JOIN a a2 USING c;')); 21 | }); 22 | 23 | it('USING followed by name in parathesis', function () { 24 | assert.doesNotThrow(() => alasql('SELECT * FROM a a1 JOIN a a2 USING (c);')); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test199.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 199 IF statement', function () { 9 | it('1. Simple Variant', function (done) { 10 | // alasql('CREATE DATABASE test199;USE test199'); 11 | var res = alasql('IF TRUE SELECT VALUE 100'); 12 | assert(res == 100); 13 | // alasql('DROP DATABASE test199'); 14 | done(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /test/test200.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 200 IS NULL + IS NOT NULL', function () { 9 | it('1. Simple Variant', function (done) { 10 | alasql('CREATE DATABASE test200; USE test200'); 11 | var res = alasql('IF 1 IS NOT NULL CREATE TABLE one'); 12 | assert(!!alasql.tables.one); 13 | 14 | var res = alasql('ROW OF SELECT NULL IS NULL, 1 IS NULL, NULL NOT NULL, 1 NOT NULL'); 15 | assert.deepEqual(res, [true, false, false, true]); 16 | var res = alasql('ROW OF SELECT NULL IS NOT NULL, 1 IS NOT NULL'); 17 | assert.deepEqual(res, [false, true]); 18 | 19 | alasql('DROP DATABASE test200'); 20 | done(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test203myfn.js1: -------------------------------------------------------------------------------- 1 | if(alasql) { 2 | alasql.fn.myfn = function(n){ 3 | return n*n; 4 | }; 5 | }; -------------------------------------------------------------------------------- /test/test203myfn2.js1: -------------------------------------------------------------------------------- 1 | alasql.fn.myfn2 = function(n){ 2 | return n*n*n; 3 | }; 4 | -------------------------------------------------------------------------------- /test/test204.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 204 PRINT', function () { 9 | it.skip('1. PRINT()', function (done) { 10 | // var oldconsolelog = console.log; 11 | // console.log = function(){ 12 | // assert.equal(arguments[0] == '[1,4,9,16]'); 13 | // console.log = oldconsolelog; 14 | // done(); 15 | // }; 16 | 17 | // Please let done() depend on output 18 | var data = [1, 2, 3, 4]; 19 | alasql('PRINT (SELECT COLUMN _^2 FROM ?)', [data]); 20 | alasql('PRINT SELECT COLUMN _^2 FROM ?', [data]); 21 | done(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test208.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (typeof exports != 'object') { 9 | describe('Test 208 WebWorker', function () { 10 | it('1. WebWorker', function (done) { 11 | alasql.worker(); 12 | alasql('SELECT VALUE 100', [], function (res) { 13 | assert(res == 100); 14 | alasql.worker(false); 15 | var res = alasql('SELECT VALUE 200'); 16 | assert(res == 200); 17 | alasql.worker(); 18 | // console.log(alasql.webworker) 19 | alasql('SELECT VALUE 300', [], function (res) { 20 | assert(res == 300); 21 | alasql.worker(false); 22 | done(); 23 | }); 24 | }); 25 | }); 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /test/test209.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 209 SELECT FROM @localvar', function () { 9 | it('1. FROM @localvar', function (done) { 10 | alasql('SET @one = @[{a:1},{a:2},{a:3}]'); 11 | alasql('SELECT * FROM @one ORDER BY a DESC', [], function (res) { 12 | assert.deepEqual(res, [{a: 3}, {a: 2}, {a: 1}]); 13 | done(); 14 | }); 15 | }); 16 | 17 | it('2. FROM @localvar', function (done) { 18 | alasql('SELECT * INTO @two FROM @one ORDER BY a DESC'); 19 | alasql('SELECT * FROM @two', [], function (res) { 20 | assert.deepEqual(res, [{a: 3}, {a: 2}, {a: 1}]); 21 | done(); 22 | }); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/test210.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 210 WHILE BREAK CONTINUE', function () { 9 | /** @todo Add CONTINUE operator */ 10 | 11 | // please let done depend on output 12 | it.skip('1. WHILE BREAK', function (done) { 13 | alasql( 14 | 'SET @i = 1; \ 15 | WHILE @i < 5 \ 16 | BEGIN \ 17 | -- PRINT 1,@i, @i*10;\ 18 | SET @i = @i + 1;\ 19 | IF @i % 2 = 0 CONTINUE; \ 20 | -- PRINT "ODD"\ 21 | ;\ 22 | END', 23 | [], 24 | function () { 25 | /// console.log('ok'); 26 | done(); 27 | } 28 | ); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/test218.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 218 N string and PRINT "a"', function () { 9 | it("1. N'String' ", function (done) { 10 | var res = alasql("SELECT VALUE N'This is a string'"); // N' added for compatibility with MSSQL - the N can be avoided. 11 | // console.log(res); 12 | assert(res == 'This is a string'); 13 | done(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /test/test220.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 220 WITH clause', function () { 9 | it('1. One WITH', function (done) { 10 | var sql = 11 | 'WITH one AS (SELECT * FROM ?), \ 12 | two AS (SELECT * FROM ?) \ 13 | SELECT * FROM one,two;SELECT * FROM ?'; 14 | // console.log(alasql.parse(sql).toString()); 15 | var res = alasql( 16 | 'WITH one AS (SELECT * FROM ?), two AS (SELECT * FROM ?)\ 17 | SELECT * FROM one,two', 18 | [ 19 | [{a: 1}, {a: 2}], 20 | [{b: 10}, {b: 20}], 21 | ] 22 | ); 23 | // console.log(res); 24 | assert.deepEqual(res, [ 25 | {a: 1, b: 10}, 26 | {a: 1, b: 20}, 27 | {a: 2, b: 10}, 28 | {a: 2, b: 20}, 29 | ]); 30 | done(); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /test/test221.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 221 Multi-line comments', function () { 9 | it('1. /* */ and -- style comments', function (done) { 10 | var res = alasql.utils.uncomment('one /* two \n three */ four \n five -- six\nseven'); 11 | // console.log(res); 12 | assert.equal(res, 'one four \n five \nseven'); 13 | done(); 14 | }); 15 | 16 | it('2. /* */', function (done) { 17 | var res = alasql.utils.uncomment('SELECT /* xxx */ VALUE /* blahblah \n tuturututu */ 1'); 18 | // console.log(res); 19 | assert.equal(res, 'SELECT VALUE 1'); 20 | done(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test222.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (false) { 9 | // Functionality discontinued 10 | // AG 20.04.2015 11 | describe('Test 222 TD TH syntax', function () { 12 | it('1. TD', function (done) { 13 | alasql('SELECT _ TD {className:"red"} FROM RANGE(1,2)'); 14 | done(); 15 | }); 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /test/test224.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 224 Mix JavaScript and SQL', function () { 9 | it('1. JavaScript Expression', function (done) { 10 | var res = alasql('SELECT VALUE ``1+1``'); 11 | assert(res == 2); 12 | done(); 13 | }); 14 | 15 | it('2. JavaScript Expression', function (done) { 16 | var data = [{a: 1}, {a: 2}]; 17 | var res = alasql('SELECT COLUMN ``p.one.a`` AS aa FROM ? one', [data]); 18 | assert.deepEqual(res, [1, 2]); 19 | done(); 20 | }); 21 | 22 | it('3. JavaScript Operator', function (done) { 23 | alasql.fn.done = done; 24 | var res = alasql('``setTimeout(function(){alasql.fn.done()},100);``'); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test227.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 227 Float numbers and COALESCE', function () { 9 | it('1. 1.234', function (done) { 10 | var res = alasql('SELECT ROW 1.23, 2.345, 4.56'); 11 | // console.log(res); 12 | assert.deepEqual(res, [1.23, 2.345, 4.56]); 13 | done(); 14 | }); 15 | 16 | it('2. 1.234e10', function (done) { 17 | var res = alasql('SELECT VALUE 1.234e10'); 18 | // console.log(res); 19 | assert.deepEqual(res, 1.234e10); 20 | done(); 21 | }); 22 | 23 | it('3. COALESCE', function (done) { 24 | var cars = [ 25 | {color: 'blue'}, 26 | {model: 'Mazda', city: 'Paris'}, 27 | {city: 'Rome'}, 28 | {color: 'black', model: 'Citroen'}, 29 | ]; 30 | var res = alasql('SELECT COLUMN COALESCE(model,color,city) FROM ?', [cars]); 31 | // console.log(res); 32 | assert.deepEqual(res, ['blue', 'Mazda', 'Rome', 'Citroen']); 33 | done(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /test/test228.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 228 SELECT inside expressions', function () { 9 | it('1. UPDATE WITH SELECT', function (done) { 10 | alasql('CREATE DATABASE test228; USE test228;'); 11 | alasql('CREATE TABLE one(a INT, b INT)'); 12 | alasql('INSERT INTO one VALUES (1,10),(2,20),(3,30),(4,40)'); 13 | 14 | var res = alasql('SELECT COLUMN a+(SELECT MAX(b) FROM one) FROM one'); 15 | assert.deepEqual(res, [41, 42, 43, 44]); 16 | // console.log(res); 17 | 18 | // var res = alasql('UPDATE one SET a = a + (SELECT MAX(b) FROM one)'); 19 | // console.log(res); 20 | // assert.deepEqual(res,[1.23, 2.345, 4.56]); 21 | alasql('DROP DATABASE test228'); 22 | done(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/test233.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | // Test is based on 9 | // https://msdn.microsoft.com/en-us/library/ms190349.aspx 10 | // 11 | describe('Test 233 COALESCE() test', function () { 12 | it('1. Prepare database', function (done) { 13 | alasql('CREATE DATABASE test233; USE test233;'); 14 | done(); 15 | }); 16 | 17 | it('2. Throw error', function (done) { 18 | alasql('source "' + __dirname + '/test233.sql"', [], function (res) { 19 | assert.deepEqual( 20 | alasql.utils.flatArray(res.pop()), 21 | [10000, 20000, 20800, 30000, 40000, 41600, 45000, 50000, 56000, 62400, 83200, 120000] 22 | ); 23 | done(); 24 | }); 25 | }); 26 | 27 | it('99. DROP', function (done) { 28 | alasql.options.nocount = false; 29 | alasql('DROP DATABASE test233'); 30 | done(); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /test/test233.sql: -------------------------------------------------------------------------------- 1 | SET NOCOUNT ON; 2 | GO 3 | CREATE TABLE wages 4 | ( 5 | emp_id tinyint identity, 6 | hourly_wage decimal NULL, 7 | salary decimal NULL, 8 | commission decimal NULL, 9 | num_sales tinyint NULL 10 | ); 11 | GO 12 | INSERT wages (hourly_wage, salary, commission, num_sales) 13 | VALUES 14 | (10.00, NULL, NULL, NULL), 15 | (20.00, NULL, NULL, NULL), 16 | (30.00, NULL, NULL, NULL), 17 | (40.00, NULL, NULL, NULL), 18 | (NULL, 10000.00, NULL, NULL), 19 | (NULL, 20000.00, NULL, NULL), 20 | (NULL, 30000.00, NULL, NULL), 21 | (NULL, 40000.00, NULL, NULL), 22 | (NULL, NULL, 15000, 3), 23 | (NULL, NULL, 25000, 2), 24 | (NULL, NULL, 20000, 6), 25 | (NULL, NULL, 14000, 4); 26 | GO 27 | SET NOCOUNT OFF; 28 | GO 29 | SELECT CAST(COALESCE(hourly_wage * 40 * 52, 30 | salary, 31 | commission * num_sales) AS money) AS [Total Salary] 32 | FROM wages 33 | ORDER BY [Total Salary]; 34 | -------------------------------------------------------------------------------- /test/test234.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | // Test is based on 9 | // https://msdn.microsoft.com/en-us/library/ms190349.aspx 10 | // 11 | describe('Test 234 Complex test', function () { 12 | it('1. Prepare database', function (done) { 13 | alasql('CREATE DATABASE test234; USE test234;'); 14 | done(); 15 | }); 16 | 17 | it('2. Throw error', function (done) { 18 | alasql('source "' + __dirname + '/test234.sql"', [], function (res) { 19 | // console.log(res); 20 | assert.deepEqual(res.pop(), [ 21 | {FirstName: 'John', LastName: 'Johnson'}, 22 | {FirstName: 'Larry', LastName: 'Larrison'}, 23 | ]); 24 | done(); 25 | }); 26 | }); 27 | 28 | it('99. DROP', function (done) { 29 | alasql('DROP DATABASE test234'); 30 | done(); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /test/test234.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE people ( 2 | FirstName STRING, 3 | LastName STRING, 4 | Gender STRING 5 | ); 6 | 7 | INSERT INTO people VALUES ("John","Johnson","M"),("John","Johnson","M"),("John","Johnson","M"),("John","Johnson","M"),("John","Johnson","M"),("John","Johnson","M"); 8 | 9 | INSERT INTO people VALUES ("Peter","Petersen","M"), 10 | ("Peter","Petersen","M"), 11 | ("Peter","Petersen","M"), 12 | ("Peter","Petersen","M"); 13 | 14 | INSERT INTO people VALUES ("Larry","Larrison","M"),("Larry","Larrison","M"),("Larry","Larrison","M"),("Larry","Larrison","M"),("Larry","Larrison","M"),("Larry","Larrison","M"),("Larry","Larison","M"); 15 | 16 | --DECLARE @M STRING = "M"; 17 | 18 | SELECT FirstName, LastName 19 | FROM people 20 | GROUP BY FirstName, LastName 21 | HAVING SUM(CASE WHEN Gender = "M" THEN 1 ELSE 0 END) >= 5; -------------------------------------------------------------------------------- /test/test235.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | // Test is based on 9 | // https://msdn.microsoft.com/en-us/library/ms190349.aspx 10 | // 11 | describe('Test 235 SELECT INSIDE IF', function () { 12 | it('1. Prepare database', function (done) { 13 | alasql('CREATE DATABASE test235; USE test235;'); 14 | done(); 15 | }); 16 | 17 | it('2. Throw error', function (done) { 18 | var data = [{a: 1}, {a: 2}]; 19 | var res = alasql('IF EXISTS(SELECT * FROM ? WHERE a = 2) SELECT VALUE 1 ELSE SELECT VALUE 2', [ 20 | data, 21 | ]); 22 | assert(res == 1); 23 | var res = alasql('IF EXISTS(SELECT * FROM ? WHERE a = 3) SELECT VALUE 1 ELSE SELECT VALUE 2', [ 24 | data, 25 | ]); 26 | assert(res == 2); 27 | // console.log(res); 28 | done(); 29 | }); 30 | 31 | it('99. DROP', function (done) { 32 | alasql('DROP DATABASE test235'); 33 | done(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /test/test238.json: -------------------------------------------------------------------------------- 1 | [{"100":100}] -------------------------------------------------------------------------------- /test/test238a.csv: -------------------------------------------------------------------------------- 1 | a,b 2 | 1,2 3 | -------------------------------------------------------------------------------- /test/test238b.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test238b.xlsx -------------------------------------------------------------------------------- /test/test241.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 241 :: type casting operator and Ranges', function () { 9 | it(':: operator', function (done) { 10 | var res = alasql('select value 10::string'); 11 | assert(res === '10'); 12 | done(); 13 | }); 14 | 15 | // 1::INT 16 | 17 | // Ranges 18 | 19 | // select '[1,2)'::range 20 | // select 1 in '[1,2)'::range 21 | 22 | // { 23 | // ubopen:true, 24 | // ubvalue:, 25 | // lbopen:true, 26 | // lbvalue: 27 | // } 28 | 29 | // a @&& a 30 | // a @* a 31 | }); 32 | -------------------------------------------------------------------------------- /test/test242.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | var path = require('path'); 5 | var dirname = path.normalize(__dirname) + '/'; 6 | } else { 7 | var dirname = './'; 8 | } 9 | 10 | describe('Test 242 Multi-columns Excel file', function () { 11 | it('1. Read multi-column file', function (done) { 12 | alasql( 13 | 'select * from xlsx("' + dirname + 'test242.xlsx",{headers:false})', 14 | [], 15 | function (data) { 16 | // console.log(data[0]); 17 | assert(data[0].CV == 100); 18 | done(); 19 | } 20 | ); 21 | }); 22 | 23 | it('2. Read multi-column file', function (done) { 24 | alasql( 25 | 'select * from xlsx("' + dirname + 'test242.xlsx", {headers:true,sheetid:"Sheet2"})', 26 | [], 27 | function (data) { 28 | // console.log(data[3]); 29 | assert(data[3].five == 800); 30 | done(); 31 | } 32 | ); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /test/test242.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test242.xlsx -------------------------------------------------------------------------------- /test/test244.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 244 Case-insensitive LIKE', function () { 9 | it('1. LIKE', function (done) { 10 | var data = [ 11 | {a: 'one', b: 'first'}, 12 | {a: 'two', b: 'second'}, 13 | {a: 'THREE', b: 'THIRD'}, 14 | ]; 15 | 16 | var res = alasql('SELECT b FROM ? WHERE a LIKE "T%"', [data]); 17 | 18 | //console.log(res); 19 | assert.deepEqual(res, [{b: 'second'}, {b: 'THIRD'}]); 20 | done(); 21 | }); 22 | 23 | it('2. LIKE', function (done) { 24 | var data = [ 25 | {a: 'Warsaw'}, 26 | {a: 'Berlin'}, 27 | {a: 'Paris'}, 28 | {a: 'London'}, 29 | {a: 'MOSCOW'}, 30 | {a: 'KYIV'}, 31 | {a: 'MINSK'}, 32 | ]; 33 | 34 | var res = alasql('SELECT * FROM ? WHERE a LIKE "m%"', [data]); 35 | //console.log(res); 36 | assert.deepEqual(res, [{a: 'MOSCOW'}, {a: 'MINSK'}]); 37 | done(); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /test/test245.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 245 Square brackets and JavaScript', function () { 9 | it('1. Square brackets', function (done) { 10 | var data = [{'[one]': 1}, {'[one]': 2}]; 11 | 12 | var res = alasql('SELECT COLUMN `[one]` FROM ?', [data]); 13 | 14 | //console.log(res); 15 | assert.deepEqual(res, [1, 2]); 16 | done(); 17 | }); 18 | 19 | it('2. JavaScript', function (done) { 20 | var data = [ 21 | {a: 'Warsaw'}, 22 | {a: 'Berlin'}, 23 | {a: 'Paris'}, 24 | {a: 'London'}, 25 | {a: 'MOSCOW'}, 26 | {a: 'KYIV'}, 27 | {a: 'MINSK'}, 28 | ]; 29 | 30 | var res = alasql('SELECT VALUE ``1+1``', [data]); 31 | //console.log(res); 32 | 33 | assert.equal(res, 2); 34 | done(); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /test/test248.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 248 IN ()', function () { 9 | it('1. IN ()', function (done) { 10 | var res = alasql('SELECT VALUE 1 IN ()'); 11 | assert(res == false); 12 | 13 | done(); 14 | }); 15 | 16 | it('2. NOT IN ()', function (done) { 17 | var res = alasql('SELECT VALUE 1 NOT IN ()'); 18 | assert(res == true); 19 | 20 | done(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test249.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 249 - NULL as null', function () { 9 | // This test should be failed, because AlaSQL supports 'undefined' 10 | 11 | it('1. Simple NULL value', function (done) { 12 | var res = alasql('SELECT VALUE NULL'); 13 | assert(res === undefined); 14 | 15 | done(); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /test/test251.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 251 Overwrite XLSX file', function () { 9 | if (typeof exports === 'object') { 10 | it('1. Overwrite', function (done) { 11 | alasql('SELECT * INTO XLSX("' + __dirname + '/test251.xlsx", {headers:true}) from ?', [ 12 | {a: 1, b: 2}, 13 | ]); 14 | 15 | alasql( 16 | 'SELECT HOUR(NOW()), MINUTE(NOW()), SECOND(NOW()) \ 17 | INTO XLSX("' + 18 | __dirname.toString().replace(/\\/g, '/') + 19 | '/restest251.xlsx",{sourcefilename:"' + 20 | __dirname.toString().replace(/\\/g, '/') + 21 | '/test251.xlsx' + 22 | '", \ 23 | sheetid:"test2", range:"B3"})', 24 | [], 25 | function (res) { 26 | assert(res == 1); 27 | done(); 28 | } 29 | ); 30 | }); 31 | } 32 | }); 33 | -------------------------------------------------------------------------------- /test/test252.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 252 CREATE TABLE without column types', function () { 9 | it('1. Overwrite', function (done) { 10 | alasql('CREATE DATABASE test252; USE test252;'); 11 | alasql('CREATE TABLE sqlite_sequence(name,seq)'); 12 | alasql('INSERT INTO sqlite_sequence VALUES (1,10)'); 13 | alasql('INSERT INTO sqlite_sequence VALUES ("one","ten")'); 14 | var res = alasql('SELECT * FROM sqlite_sequence'); 15 | // console.log(res); 16 | 17 | assert.deepEqual(res, [ 18 | {name: 1, seq: 10}, 19 | {name: 'one', seq: 'ten'}, 20 | ]); 21 | done(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test253.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 253 Internal (SELECT) with GROUP BY', function () { 9 | it('1. Test', function (done) { 10 | var data = [ 11 | {a: 3.5, b: {c: 'label1'}}, 12 | {a: 0.5, b: {c: 'label1'}}, 13 | {a: 6, b: {c: 'label2'}}, 14 | ]; 15 | 16 | var res = alasql( 17 | 'SELECT FIRST(b->c) as [b->c], sum(a)/(select sum(a) from ?) \ 18 | from ? group by b->c', 19 | [data, data] 20 | ); 21 | 22 | assert.deepEqual(res, [ 23 | { 24 | 'b->c': 'label1', 25 | 'SUM(a) / SELECT SUM(a) FROM $0 AS default': 0.4, 26 | }, 27 | { 28 | 'b->c': 'label2', 29 | 'SUM(a) / SELECT SUM(a) FROM $0 AS default': 0.6, 30 | }, 31 | ]); 32 | 33 | done(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /test/test255.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 255 Export numbers to Excel as numbers', function () { 9 | if (typeof exports === 'object') { 10 | it('1. Create database', function (done) { 11 | // var data = [{a:"1.2",b:"1,2"},{a:"2.2",b:"2,3"}]; 12 | // alasql('select a::number,b into xlsx("a.xlsx",{headers:true}) from ?',[data]); 13 | alasql( 14 | 'select 12.345, 67.89, 1,10 into xlsx("' + __dirname + '/restest255.xlsx",{headers:true})' 15 | ); 16 | 17 | done(); 18 | }); 19 | } 20 | }); 21 | -------------------------------------------------------------------------------- /test/test262.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (typeof exports == 'object') { 9 | describe('Test 262 Leaking of "key" variable to global scope', function () { 10 | it('1. Sqllogic', function (done) { 11 | const mytable = [{name: 'Hello'}, {name: 'Wolrd'}]; 12 | 13 | assert(typeof global.key === 'undefined'); // undefined 14 | 15 | alasql('SELECT * FROM ?', [mytable]); 16 | assert(typeof global.key === 'undefined'); // undefined 17 | 18 | done(); 19 | }); 20 | }); 21 | } 22 | -------------------------------------------------------------------------------- /test/test264.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (typeof exports == 'object') { 9 | describe('Test 264 SELECT RECORDSET', function () { 10 | it('1. Test', function (done) { 11 | var data = [ 12 | {a: 1, b: 10}, 13 | {b: 2, a: 45}, 14 | ]; 15 | var res = alasql('SELECT RECORDSET * FROM ?', [data]); 16 | /// console.log(res); 17 | // assert.deepEqual(res,[ { 'MAX(MAX(a),MIN(a))': 8, 'MIN(MAX(a),MIN(a))': 1 } ]); 18 | done(); 19 | }); 20 | }); 21 | } 22 | -------------------------------------------------------------------------------- /test/test271.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 271 RECORDSET and Excel tests', function () { 9 | it('1. Open Excel and columns', function (done) { 10 | var res = alasql( 11 | 'SELECT RECORDSET * FROM XLSX("' + __dirname + '/test168.xlsx",{headers:true})', 12 | [], 13 | function (res) { 14 | var colres = res.columns.map(col => col.columnid); 15 | assert.deepEqual(colres, ['City', 'Population']); 16 | done(); 17 | } 18 | ); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /test/test274.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 274 Count and other bugs', function () { 9 | it('2. Select count', function (done) { 10 | var res = alasql('SELECT _ AS a FROM RANGE(1,10)'); 11 | /// console.log(res); 12 | 13 | var res = alasql('SELECT * FROM (SELECT _ AS a FROM RANGE(1,10))'); 14 | /// console.log(res); 15 | 16 | var res = alasql('SELECT RECORDSET COUNT(*) FROM RANGE(1,10)'); 17 | /// console.log(res); 18 | // var colres = _.pluck(res.columns,'columnid'); 19 | // assert.deepEqual(colres, ["a","b"]); 20 | alasql.options.modifier = undefined; 21 | done(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test278.json: -------------------------------------------------------------------------------- 1 | { 2 | "alasql": "{\"databases\":{\"Atlas\":true}}", 3 | "Atlas": "{\"databaseid\":\"Atlas\",\"tables\":{\"transactions\":{\"columns\":[{\"columnid\":\"transid\",\"dbtypeid\":\"\"},{\"columnid\":\"payee\",\"dbtypeid\":\"\"},{\"columnid\":\"amount\",\"dbtypeid\":\"\"}]}}}", 4 | "Atlas.transactions": "[]" 5 | } 6 | -------------------------------------------------------------------------------- /test/test279.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | if (typeof exports == 'object') { 9 | // Test only for browsers 10 | 11 | describe('Test 279 IE9 tests', function () { 12 | it('1. Detect if it is IE9', function (done) { 13 | var data = [ 14 | {city: 'London', population: 5000000}, 15 | {city: 'Moscow', population: 12000000}, 16 | ]; 17 | // alasql('SELECT * INTO TSV("aaa.txt",{headers:true}) FROM ?',[data]); 18 | // alasql('SELECT * INTO XLS("aaa.xls",{headers:true}) FROM ?',[data]); 19 | alasql('SELECT * INTO XLSXML("' + __dirname + '/restest279.xls",{headers:true}) FROM ?', [ 20 | data, 21 | ]); 22 | done(); 23 | }); 24 | }); 25 | } 26 | -------------------------------------------------------------------------------- /test/test284.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 284 PRIMARY KEY with AUTOINCREMENT', function () { 9 | it('1. CREATE TABLE and INSERT', function (done) { 10 | var res = alasql(` 11 | CREATE DATABASE test284; 12 | USE DATABASE test284; 13 | 14 | CREATE TABLE [Categories] 15 | ( [CategoryID] INTEGER PRIMARY KEY AUTOINCREMENT, 16 | [CategoryName] TEXT, 17 | [Description] TEXT 18 | ); 19 | 20 | INSERT INTO Categories VALUES(null,'Beverages','Soft drinks, coffees, teas, beers, and ales'); 21 | INSERT INTO Categories VALUES(null,'Condiments','Sweet and savory sauces, relishes, spreads, and seasonings'); 22 | 23 | DROP DATABASE test284; 24 | `); 25 | 26 | assert.deepEqual(res, [1, 1, 1, 1, 1, 1]); 27 | 28 | done(); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/test285.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 285 CREATE UNIQUE INDEX', function () { 9 | it('1. CREATE TABLE and FIRST INSERT', function (done) { 10 | var res = alasql(` 11 | CREATE DATABASE test285; 12 | USE DATABASE test285; 13 | 14 | CREATE TABLE One 15 | ( a INT , 16 | b INT 17 | ); 18 | 19 | CREATE UNIQUE INDEX ux_one ON One(a,b); 20 | 21 | INSERT INTO One VALUES(1,1); 22 | INSERT INTO One VALUES(1,2); 23 | `); 24 | /// console.log(res); 25 | // assert.deepEqual(res,[1,1,1,1,1,1]); 26 | 27 | done(); 28 | }); 29 | 30 | it('1. DROP DATABASE', function (done) { 31 | var res = alasql('DROP DATABASE test285'); 32 | done(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /test/test289.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 289 SEARCH INSTANCEOF', function () { 9 | it('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test289;USE test289'); 11 | done(); 12 | }); 13 | 14 | it('2. SEARCH', function (done) { 15 | var ast = alasql.parse('SELECT SUM(x)+20 FROM one GROUP BY x'); 16 | 17 | // { statements: [ { columns: [ 18 | // { left: { aggregatorid: 'SUM', expression: [Object], over: undefined }, 19 | // op: '+', 20 | // right: { value: 20 } } ], from: [Object], group: [Object] } ] } 21 | 22 | var res = alasql('SEARCH /+ aggregatorid FROM ?', [ast]); 23 | assert.deepEqual(res, ['SUM']); 24 | /// console.log(res); 25 | // assert.deepEqual(res,[ { a: 1, b: 1 }, { a: 2, b: 2 }, { a: 3, b: 3 } ]); 26 | done(); 27 | }); 28 | 29 | // TODO: Add other operators 30 | 31 | it('3. DROP DATABASE', function (done) { 32 | alasql('DROP DATABASE test289'); 33 | done(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /test/test290.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 290 FROM Json', function () { 9 | it.skip('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test290;USE test290'); 11 | done(); 12 | }); 13 | 14 | it.skip('2. SELECT', function (done) { 15 | var res = alasql('SELECT VALUE @[1,2,3,(b+4)] FROM @[{b:100}]'); 16 | // console.log(res); 17 | assert.deepEqual(res, [1, 2, 3, 104]); 18 | done(); 19 | }); 20 | 21 | it.skip('3. JOINed source', function (done) { 22 | var res = alasql( 23 | 'SELECT * FROM @[{a:1,b:10},{a:2,b:20}] \ 24 | JOIN @[{b:10,c:100},{b:20,c:200},{b:30,c:300},] ON b' 25 | ); 26 | console.log(res); 27 | assert.deepEqual(res, [1, 2, 3, 104]); 28 | done(); 29 | }); 30 | 31 | // TODO: Add other operators 32 | 33 | it.skip('3. DROP DATABASE', function (done) { 34 | alasql('DROP DATABASE test290'); 35 | done(); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /test/test292.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 292 Nested searches', function () { 9 | it.skip('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test292;USE test292'); 11 | done(); 12 | }); 13 | 14 | var data = [{a: {b: [{c: 1}, {c: 2}, {c: 3}]}}, {a: {b: [{c: 4}, {c: 5}, {c: 6}]}}]; 15 | 16 | it.skip('2. Search inside select', function (done) { 17 | var res = alasql('SELECT (SEARCH b SUM(/c) FROM _) FROM ?', [data]); 18 | console.log(res); 19 | done(); 20 | }); 21 | 22 | it.skip('3. SELECT inside SEARCH', function (done) { 23 | var res = alasql('SEARCH a (SELECT SUM(c) FROM b) FROM ?'); 24 | console.log(res); 25 | done(); 26 | }); 27 | 28 | it.skip('4. DROP DATABASE', function (done) { 29 | alasql('DROP DATABASE test292'); 30 | done(); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /test/test298.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 298 PLUG-IN TEST', function () { 9 | it('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test298;USE test298'); 11 | done(); 12 | }); 13 | 14 | it('2.REQURE ECHO plugin', function (done) { 15 | assert.throws(function () { 16 | var res = alasql('ECHO 1'); 17 | // console.log(1,res); 18 | }, Error); 19 | 20 | var res = alasql('REQUIRE ECHO'); 21 | assert.deepEqual(res, 1); 22 | var res = alasql('ECHO 10'); 23 | assert.deepEqual(res, 10); 24 | // console.log(2,res); 25 | done(); 26 | }); 27 | 28 | it('99. DROP DATABASE', function (done) { 29 | alasql('DROP DATABASE test298'); 30 | done(); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /test/test299.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 299 Parser Test', function () { 9 | it.skip('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test299;USE test299'); 11 | done(); 12 | }); 13 | 14 | it.skip('2.Tests', function (done) { 15 | var res = alasql(' AUTO_INCREMENT'); 16 | console.log(res); 17 | // console.log(2,res); 18 | done(); 19 | }); 20 | 21 | it.skip('99. DROP DATABASE', function (done) { 22 | alasql('DROP DATABASE test299'); 23 | done(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /test/test305a.gexf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Gexf.net 5 | A hello world! file 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/test306a.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Gexf.net 5 | A hello world! file 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/test309.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 309 # operator and graphs', function () { 9 | it('0. Create database ', function (done) { 10 | alasql('CREATE DATABASE test309;USE test309'); 11 | done(); 12 | }); 13 | 14 | it('1. SET selector', function (done) { 15 | alasql('CREATE VERTEX #Andrey SET age = 44'); 16 | alasql('CREATE VERTEX #Olga SET age = 35'); 17 | alasql('CREATE VERTEX #Maria SET age = 28'); 18 | var res = alasql('SELECT VALUE #Andrey->age'); 19 | assert(res == 44); 20 | var res = alasql('SEARCH age FROM #Olga'); 21 | assert.deepEqual(res, [35]); 22 | var res = alasql('SEARCH / AS @p #Olga age'); 23 | assert.deepEqual(res, [35]); 24 | var res = alasql('SEARCH VALUE / #Olga age'); 25 | // console.log(res); 26 | assert(res == 35); 27 | 28 | done(); 29 | }); 30 | 31 | it('99. Drop database ', function (done) { 32 | alasql('DROP DATABASE test309'); 33 | done(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /test/test314.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 314 SEARCH with null values', function () { 9 | it('1. Traverse with null', function (done) { 10 | var data = [{a: 1}, null]; 11 | 12 | var res = alasql('SEARCH / a FROM ?', [data]); 13 | assert.deepEqual(res, [1]); 14 | done(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /test/test321a.csv: -------------------------------------------------------------------------------- 1 | source,target,value 2 | Harry,Sally,1.2 3 | Harry,Mario,1.3 4 | Sarah,Alice,0.2 5 | Eveie,Alice,0.5 6 | Peter,Alice,1.6 7 | Mario,Alice,0.4 8 | James,Alice,0.6 9 | Harry,Carol,0.7 10 | Harry,Nicky,0.8 11 | Bobby,Frank,0.8 12 | Alice,Mario,0.7 13 | Harry,Lynne,0.5 14 | Sarah,James,1.9 15 | Roger,James,1.1 16 | Maddy,James,0.3 17 | Sonny,Roger,0.5 18 | James,Roger,1.5 19 | Alice,Peter,1.1 20 | Johan,Peter,1.6 21 | Alice,Eveie,0.5 22 | Harry,Eveie,0.1 23 | Eveie,Harry,2.0 24 | Henry,Mikey,0.4 25 | Elric,Mikey,0.6 26 | James,Sarah,1.5 27 | Alice,Sarah,0.6 28 | James,Maddy,0.5 29 | Peter,Johan,0.7 30 | -------------------------------------------------------------------------------- /test/test323.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 323 ANY() and ALL()', function () { 9 | it('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test323; USE test323'); 11 | done(); 12 | }); 13 | 14 | var data = [{a: 1}, {a: 2}]; 15 | it('2. ALL', function (done) { 16 | var res = alasql('SEARCH ALL(/a) FROM ?', [data]); 17 | assert.deepEqual(res, [1, 2]); // To be checked 18 | done(); 19 | }); 20 | 21 | it('3. ANY', function (done) { 22 | var res = alasql('SEARCH ANY(/a) FROM ?', [data]); 23 | assert.deepEqual(res, [1]); // To be checked 24 | done(); 25 | }); 26 | 27 | it('99. DROP DATABASE', function (done) { 28 | alasql('DROP DATABASE test323'); 29 | done(); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/test330.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 330 PROLOG', function () { 9 | before(function () { 10 | alasql('CREATE DATABASE test330;'); 11 | alasql('USE test330'); 12 | alasql('REQUIRE PROLOG'); 13 | }); 14 | 15 | after(function () { 16 | alasql('DROP DATABASE test330'); 17 | }); 18 | 19 | it('1. FACTS', function (done) { 20 | var res = alasql(':-son(Alex,Larissa)'); 21 | //Todo - assert something to check if PROLOG is also returning correctly 22 | done(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/test342.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 342 Expression Statement', function () { 9 | it('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test342;USE test342'); 11 | done(); 12 | }); 13 | 14 | it('2. Expression', function (done) { 15 | var res = alasql('=2*2'); 16 | assert.deepEqual(res, 4); 17 | done(); 18 | }); 19 | 20 | it('3. Expression with SELECT', function (done) { 21 | var res = alasql('=2*(SELECT VALUE 2)'); 22 | assert.deepEqual(res, 4); 23 | done(); 24 | }); 25 | 26 | it('99. DROP DATABASE', function (done) { 27 | alasql.options.modifier = undefined; 28 | alasql('DROP DATABASE test342'); 29 | done(); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/test351.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 351 CALL PROCEDURE', function () { 9 | it('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test351;USE test351'); 11 | done(); 12 | }); 13 | 14 | it('2. CREATE TABLE', function (done) { 15 | alasql.fn.myfn = function (a, b) { 16 | // console.log(a,b); 17 | assert.deepEqual([a, b], [1, 2]); 18 | done(); 19 | }; 20 | var res = alasql('CALL myfn(1,2)'); 21 | // assert.deepEqual(res,1); 22 | }); 23 | 24 | it('99. DROP DATABASE', function (done) { 25 | alasql.options.modifier = undefined; 26 | alasql('DROP DATABASE test351'); 27 | done(); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /test/test362.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 362 IF() and IIF()', function () { 9 | it('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test362;USE test362'); 11 | done(); 12 | }); 13 | 14 | it('2. TEST', function (done) { 15 | var res = alasql('VALUE OF SELECT IIF(1>2,2,3)'); 16 | assert.deepEqual(res, 3); 17 | var res = alasql('VALUE OF SELECT IF(1>2,2,3)'); 18 | assert.deepEqual(res, 3); 19 | done(); 20 | }); 21 | 22 | it('99. DROP DATABASE', function (done) { 23 | alasql('DROP DATABASE test362'); 24 | done(); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test363.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 363 -> with undefined', function () { 9 | it('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test363;USE test363'); 11 | done(); 12 | }); 13 | 14 | it('2. TEST', function (done) { 15 | var res = alasql('VALUE OF SELECT a->name FROM ?', [[{a: {name: 'hello'}}]]); 16 | assert.deepEqual(res, 'hello'); 17 | var res = alasql('VALUE OF SELECT a->name FROM ?', [{}]); 18 | assert.deepEqual(res, undefined); 19 | var res = alasql('VALUE OF SELECT {}->name'); 20 | assert.deepEqual(res, undefined); 21 | var res = alasql('VALUE OF SELECT {amt:10}->amt'); 22 | assert.deepEqual(res, 10); 23 | done(); 24 | }); 25 | 26 | it('99. DROP DATABASE', function (done) { 27 | alasql('DROP DATABASE test363'); 28 | done(); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/test364.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 364 QUESTION MAK IN STRINGS', function () { 9 | it('1. CREATE DATABASE', function (done) { 10 | alasql('CREATE DATABASE test364;USE test364'); 11 | alasql('CREATE TABLE pet(name STRING)'); 12 | alasql('INSERT INTO pet VALUES ("Cat"),("Dog")'); 13 | done(); 14 | }); 15 | 16 | it('2. TEST', function (done) { 17 | var res = alasql('SELECT * FROM pet WHERE name LIKE "?%"'); 18 | var res = alasql('SELECT * FROM pet WHERE name LIKE "%?%"'); 19 | var res = alasql('SELECT * FROM pet WHERE name LIKE "%?"'); 20 | done(); 21 | }); 22 | 23 | it('99. DROP DATABASE', function (done) { 24 | alasql('DROP DATABASE test364'); 25 | done(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /test/test365.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | var name = ''; 9 | describe('Test 365 Default database function', function () { 10 | it('1. CREATE DATABASE', function (done) { 11 | var db = new alasql.Database(); 12 | name = db.databaseid; 13 | // console.log(db); 14 | var res = db.exec('VALUE OF SELECT 2+3'); 15 | assert.deepEqual(res, 5); 16 | done(); 17 | }); 18 | 19 | it('99. DROP DATABASE', function (done) { 20 | alasql('DROP DATABASE ' + name); 21 | done(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test367.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 367 NOT and = predecessing', function () { 9 | it('NOT over =', function (done) { 10 | var data = [{a: 1}, {a: 2}, {a: 3}]; 11 | var res = alasql('SELECT * FROM ? WHERE NOT a = 1', [data]); 12 | assert.deepEqual(res, [{a: 2}, {a: 3}]); 13 | done(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /test/test368.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 368 OFFSET ... LIMIT', function () { 9 | var data = [{a: 1}, {a: 2}, {a: 3}, {a: 4}, {a: 5}, {a: 6}]; 10 | 11 | it('LIMIT', function (done) { 12 | var res = alasql('SELECT * FROM ? LIMIT 3', [data]); 13 | assert.deepEqual(res, [{a: 1}, {a: 2}, {a: 3}]); 14 | done(); 15 | }); 16 | 17 | it('OFFSET LIMIT', function (done) { 18 | var res = alasql('SELECT * FROM ? LIMIT 2 OFFSET 3', [data]); 19 | assert.deepEqual(res, [{a: 4}, {a: 5}]); 20 | done(); 21 | }); 22 | 23 | it('OFFSET FETCH', function (done) { 24 | var res = alasql('SELECT * FROM ? OFFSET 3 FETCH 2', [data]); 25 | assert.deepEqual(res, [{a: 4}, {a: 5}]); 26 | 27 | var res = alasql('SELECT * FROM ? OFFSET 3 ROWS FETCH NEXT 2 ROWS ONLY', [data]); 28 | assert.deepEqual(res, [{a: 4}, {a: 5}]); 29 | done(); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/test372.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 372', function () { 7 | it('should have a new result after insert', function () { 8 | var db = new alasql.Database(); 9 | db.exec('create table someNames (name string)'); 10 | db.exec('create table otherNames (name string)'); 11 | 12 | assert.equal( 13 | db.exec('select * from otherNames join someNames on someNames.name = otherNames.name').length, 14 | 0 15 | ); 16 | 17 | db.exec('insert into someNames values ("Lars"), ("Erik")'); 18 | db.exec('insert into otherNames values ("Lars"), ("Erik")'); 19 | 20 | assert.equal( 21 | db.exec('select * from otherNames join someNames on someNames.name = otherNames.name').length, 22 | 2 23 | ); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /test/test375.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('375. Problem with UPDATE (https://github.com/alasql/alasql/issues/479)', function () { 7 | it('1. ', function (done) { 8 | alasql( 9 | 'CREATE TABLE RpdAssignments (' + 10 | 'Id INT PRIMARY KEY AUTOINCREMENT NOT NULL,' + 11 | 'Name TEXT NOT NULL,' + 12 | 'RpdId TEXT NOT NULL,' + 13 | 'VcmtsService TEXT NOT NULL,' + 14 | 'Status TEXT NOT NULL' + 15 | ')' 16 | ); 17 | 18 | alasql( 19 | "INSERT INTO RpdAssignments (Name,RpdId, VcmtsService,Status) \ 20 | VALUES ('id1-cat1','id1','cat1','')" 21 | ); 22 | 23 | alasql('UPDATE RpdAssignments SET Name="id2" WHERE Id=1'); 24 | 25 | var res = alasql('SELECT * FROM RpdAssignments'); 26 | assert.deepEqual(res, [ 27 | { 28 | Id: 1, 29 | Name: 'id2', 30 | RpdId: 'id1', 31 | Status: '', 32 | VcmtsService: 'cat1', 33 | }, 34 | ]); 35 | done(); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /test/test377.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('377. Quotes and ASCII', function () { 7 | it('1. ', function (done) { 8 | var res = alasql('SELECT ASCII("")'); 9 | //console.log('The test is not completed',res); 10 | 11 | // Add the test!!! 12 | 13 | // assert(success); 14 | done(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /test/test378.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('378. Primary key with DELETE ALL', function () { 7 | it('1. ', function (done) { 8 | function range(i) { 9 | return i ? range(i - 1).concat({id: i}) : []; 10 | } 11 | var data = range(100); 12 | var db = new alasql.Database('db'); 13 | db.exec('CREATE TABLE test (id INT NOT NULL PRIMARY KEY)'); 14 | db.exec('INSERT INTO test SELECT * FROM ?', [data]); 15 | //console.log(db.exec("SELECT * FROM test")); 16 | assert(db.exec('SELECT * FROM test').length == 100); 17 | 18 | db.exec('DELETE FROM test'); 19 | db.exec('INSERT INTO test SELECT * FROM ?', [data]); 20 | assert(db.exec('SELECT * FROM test').length == 100); 21 | // console.log(db.exec("select * from test")) 22 | 23 | // assert(success); 24 | done(); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test379.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | var DOMStorage = require('dom-storage'); 5 | global.localStorage = new DOMStorage('./test379.json', { 6 | strict: false, 7 | ws: '', 8 | }); 9 | } 10 | 11 | describe('Test 379', function () { 12 | it('Recreate dropped table - localStorage engine', function (done) { 13 | alasql('SET AUTOCOMMIT ON'); 14 | alasql('DROP LOCALSTORAGE DATABASE IF EXISTS ls379'); 15 | alasql('CREATE LOCALSTORAGE DATABASE ls379'); 16 | alasql('ATTACH LOCALSTORAGE DATABASE ls379'); 17 | alasql('CREATE TABLE IF NOT EXISTS ls379.one (a int, b string)'); 18 | alasql('DROP TABLE ls379.one'); 19 | alasql('CREATE TABLE IF NOT EXISTS ls379.one (a int, b string)'); 20 | var res = alasql('SELECT 1 FROM ls379.one'); 21 | assert.deepEqual(res, []); 22 | done(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/test379.json: -------------------------------------------------------------------------------- 1 | { 2 | "alasql": "{\"databases\":{}}" 3 | } 4 | -------------------------------------------------------------------------------- /test/test391.json: -------------------------------------------------------------------------------- 1 | { 2 | "alasql": "{\"databases\":{\"test267\":true,\"Atlas\":true,\"test\":true,\"test159\":true,\"test001\":true,\"ls379\":true}}", 3 | "test267": "{\"databaseid\":\"test267\",\"tables\":{\"test\":{\"columns\":[]}}}", 4 | "Atlas": "{\"databaseid\":\"Atlas\",\"tables\":{}}", 5 | "test": "{\"databaseid\":\"test\",\"tables\":{\"one\":{\"columns\":[{\"columnid\":\"a\",\"dbtypeid\":\"INT\",\"identity\":{\"value\":1,\"step\":1}},{\"columnid\":\"b\",\"dbtypeid\":\"STRING\"}]}}}", 6 | "test159": "{\"databaseid\":\"test159\",\"tables\":{}}", 7 | "test001": "{\"databaseid\":\"test001\",\"tables\":{}}", 8 | "ls379": "{\"databaseid\":\"ls379\",\"tables\":{}}" 9 | } 10 | -------------------------------------------------------------------------------- /test/test397.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | // var DOMStorage = require("dom-storage"); 5 | // global.localStorage = new DOMStorage("./test390.json", { strict: false, ws: '' }); 6 | } 7 | 8 | /* 9 | This sample beased on SQLLOGICTEST 10 | */ 11 | 12 | describe('Test 397 << and >> ', function () { 13 | it('1. CREATE DATABASE', function (done) { 14 | alasql('CREATE DATABASE test397;USE test397'); 15 | done(); 16 | }); 17 | 18 | it('2. << and >> and other operations...', function (done) { 19 | var res = alasql('= 1 << 2'); 20 | assert.equal(res, 4); 21 | 22 | var res = alasql('= 256 >> 4'); 23 | assert.equal(res, 16); 24 | 25 | var res = alasql('= 7 & 3'); 26 | assert.equal(res, 3); 27 | 28 | var res = alasql('= 8 | 1'); 29 | assert.equal(res, 9); 30 | 31 | done(); 32 | }); 33 | 34 | it('99. DROP DATABASE', function (done) { 35 | alasql('DROP DATABASE test397'); 36 | done(); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /test/test398.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | // var DOMStorage = require("dom-storage"); 5 | // global.localStorage = new DOMStorage("./test390.json", { strict: false, ws: '' }); 6 | } 7 | 8 | /* 9 | 10 | */ 11 | 12 | describe('Test 398 GLOB ', function () { 13 | it('1. CREATE DATABASE', function (done) { 14 | alasql('CREATE DATABASE test398;USE test398'); 15 | done(); 16 | }); 17 | 18 | it('2. GLOB tests', function (done) { 19 | var res = alasql('="abcde" GLOB "abcde"'); 20 | assert(res); 21 | var res = alasql('="abcde" GLOB "a*"'); 22 | assert(res); 23 | var res = alasql('="abcde" GLOB "a????"'); 24 | assert(res); 25 | var res = alasql('="abcde" GLOB "a?"'); 26 | assert(!res); 27 | var res = alasql('="abcde" GLOB "*b*"'); 28 | assert(res); 29 | var res = alasql('="abcde" GLOB "*g*"'); 30 | assert(!res); 31 | done(); 32 | }); 33 | 34 | it('99. DROP DATABASE', function (done) { 35 | alasql('DROP DATABASE test398'); 36 | done(); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /test/test401.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | // var DOMStorage = require("dom-storage"); 5 | // global.localStorage = new DOMStorage("./test390.json", { strict: false, ws: '' }); 6 | } 7 | 8 | /* 9 | This sample beased on SQLLOGICTEST 10 | */ 11 | 12 | describe('Test 401 NOT INDEXED', function () { 13 | it('1. CREATE DATABASE', function (done) { 14 | alasql('CREATE DATABASE test401;USE test401'); 15 | done(); 16 | }); 17 | 18 | it('2. Create table and trigger', function (done) { 19 | alasql('CREATE TABLE one (a INT)'); 20 | alasql('INSERT INTO one VALUES (100), (200), (300)'); 21 | done(); 22 | }); 23 | 24 | it('3. Insert', function (done) { 25 | var res = alasql('COLUMN OF SELECT * FROM one NOT INDEXED'); 26 | assert.deepEqual(res, [100, 200, 300]); 27 | done(); 28 | }); 29 | 30 | it('99. DROP DATABASE', function (done) { 31 | alasql('DROP DATABASE test401'); 32 | done(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /test/test404.sql: -------------------------------------------------------------------------------- 1 | create table colors (id int, name varchar(255)); 2 | create table fruits (id int, name varchar(255)); 3 | create table mascots (id int, name varchar(255)); 4 | 5 | insert into colors(id, name) values (1, 'red'); 6 | insert into colors(id, name) values (2, 'blue'); 7 | insert into colors(id, name) values (3, 'orange'); 8 | 9 | insert into fruits(id, name) values (1, 'apple'); 10 | insert into fruits(id, name) values (2, 'grape'); 11 | insert into fruits(id, name) values (3, 'orange'); 12 | insert into fruits(id, name) values (4, 'peaches'); 13 | 14 | insert into mascots(id, name) values (1, 'redsox'); 15 | insert into mascots(id, name) values (2, 'whitesox'); 16 | insert into mascots(id, name) values (3, 'orange'); 17 | insert into mascots(id, name) values (4, 'peaches'); 18 | 19 | select t0.name t0n, t1.name t1n, t2.name t2n 20 | from colors t0 21 | full outer join fruits t1 on t1.name = t0.name 22 | full outer join mascots t2 on t2.name = t1.name or t2.name = t0.name; -------------------------------------------------------------------------------- /test/test405.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | // var DOMStorage = require("dom-storage"); 5 | // global.localStorage = new DOMStorage("./test390.json", { strict: false, ws: '' }); 6 | } 7 | 8 | /* 9 | This sample beased on SQLLOGICTEST 10 | */ 11 | 12 | if (typeof exports !== 'object') { 13 | describe('Test 405. IndexDB problem (issue #512)', function () { 14 | it('1. Parse SQL', function (done) { 15 | // alasql('CREATE INDEXEDDB DATABASE IF NOT EXISTS geo;') 16 | alasql( 17 | 'CREATE INDEXEDDB DATABASE IF NOT EXISTS geo;\ 18 | ATTACH INDEXEDDB DATABASE geo; \ 19 | USE geo; \ 20 | DROP TABLE IF EXISTS cities; \ 21 | CREATE TABLE cities;\ 22 | ', 23 | [], 24 | function () { 25 | done(); 26 | } 27 | ); 28 | }); 29 | 30 | // done(); 31 | }); 32 | } 33 | -------------------------------------------------------------------------------- /test/test410.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | /* 7 | Test for issue #502 8 | */ 9 | 10 | describe('Test 410 Raise error on undefined tables', function () { 11 | it('2. CREATE DATABASE', function (done) { 12 | alasql('CREATE DATABASE test410;USE test410'); 13 | done(); 14 | }); 15 | 16 | it('2. CREATE DATABASE', function (done) { 17 | assert.throws(function () { 18 | alasql('SELECT 1 FROM t1 WHERE 1 IN (SELECT 1,2)'); 19 | }, Error); 20 | 21 | assert.throws(function () { 22 | alasql('SELECT 1 FROM t1 WHERE 1 IN (SELECT x,y FROM t1)'); 23 | }, Error); 24 | 25 | assert.throws(function () { 26 | alasql('SELECT 1 FROM t1 WHERE 1 IN (SELECT * FROM t1)'); 27 | }, Error); 28 | 29 | assert.throws(function () { 30 | alasql('SELECT 1 FROM t1 WHERE 1 IN (SELECT min(x),max(x) FROM t1)'); 31 | }, Error); 32 | 33 | done(); 34 | }); 35 | 36 | it('99. DROP DATABASE', function (done) { 37 | alasql('DROP DATABASE test410'); 38 | done(); 39 | }); 40 | }); 41 | -------------------------------------------------------------------------------- /test/test411.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test411.xlsx -------------------------------------------------------------------------------- /test/test419.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test419.xlsx -------------------------------------------------------------------------------- /test/test419a.txt: -------------------------------------------------------------------------------- 1 | words,letters 2 | There,5 3 | are,3 4 | five,4 5 | lines,5 6 | -------------------------------------------------------------------------------- /test/test420.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | /* 7 | Test for issue #379 8 | */ 9 | 10 | var test = 420; 11 | 12 | describe('Test ' + test + ' Load data from XLSX without extra line', function () { 13 | before(function () { 14 | alasql('CREATE DATABASE test' + test + ';USE test' + test); 15 | }); 16 | 17 | after(function () { 18 | alasql('DROP DATABASE test' + test); 19 | }); 20 | 21 | it('1. Load XLSX', function (done) { 22 | alasql( 23 | 'VALUE OF SELECT COUNT(*) FROM XLSX("' + __dirname + '/test420.xlsx")', 24 | [], 25 | function (res) { 26 | assert(res == 4); 27 | // console.log(res); 28 | // assert.deepEqual(res, 29 | // 0 30 | // ); 31 | done(); 32 | } 33 | ); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /test/test420.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test420.xlsx -------------------------------------------------------------------------------- /test/test422.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | /* 7 | Test for issue #379 8 | */ 9 | 10 | var test = 422; 11 | 12 | describe('Test ' + test + ' Test for JOINSTAR', function () { 13 | before(function () { 14 | alasql('CREATE DATABASE test' + test + ';USE test' + test); 15 | }); 16 | 17 | after(function () { 18 | alasql('DROP DATABASE test' + test); 19 | }); 20 | 21 | it('1. Create tables', function (done) { 22 | var ast = alasql.parse('SELECT * FROM table1 WHERE a = b AND a->fn(b->c) > 0'); 23 | //console.log(JSON.stringify(ast.statements[0].where)); 24 | done(); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test425.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | /* 7 | Test for issue #379 8 | */ 9 | 10 | var test = 425; 11 | 12 | describe('Test ' + test + ' Arrow and DOT', function () { 13 | before(function () { 14 | alasql('CREATE DATABASE test' + test + ';USE test' + test); 15 | }); 16 | 17 | after(function () { 18 | alasql('DROP DATABASE test' + test); 19 | }); 20 | 21 | it('1. DOT outside SELECT', function (done) { 22 | var files = ['home_01.ai', 'home_02.ai', 'home_03.ai', 'imprint_01.ai', 'imprint_02.ai']; 23 | 24 | var res = alasql('COLUMN OF SELECT ARRAY(_) FROM ? GROUP BY _->split("_")->0', [files]); 25 | assert.deepEqual(res, [ 26 | ['home_01.ai', 'home_02.ai', 'home_03.ai'], 27 | ['imprint_01.ai', 'imprint_02.ai'], 28 | ]); 29 | done(); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/test426.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | /* 7 | Test for issue #379 8 | */ 9 | 10 | var test = 426; 11 | 12 | describe('Test ' + test + ' Binary operators', function () { 13 | before(function () { 14 | alasql('CREATE DATABASE test' + test + ';USE test' + test); 15 | }); 16 | 17 | after(function () { 18 | alasql('DROP DATABASE test' + test); 19 | }); 20 | 21 | it('1. ^', function (done) { 22 | var res = alasql('= 60^13'); 23 | assert.deepEqual(res, 49); 24 | done(); 25 | }); 26 | 27 | it('2. ~', function (done) { 28 | var res = alasql('= ~60'); 29 | assert(res == -61); 30 | done(); 31 | }); 32 | 33 | it('3. POWER', function (done) { 34 | var res = alasql('= POWER(2,3)'); 35 | assert(res == 8); 36 | done(); 37 | }); 38 | 39 | it('4. EXP', function (done) { 40 | var res = alasql('= EXP(1)'); 41 | assert(res == 2.718281828459045); 42 | done(); 43 | }); 44 | }); 45 | -------------------------------------------------------------------------------- /test/test427.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | /* 7 | Test for issue #379 8 | */ 9 | 10 | var test = 427; 11 | 12 | describe('Test ' + test + ' REPLACE test', function () { 13 | before(function () { 14 | alasql('CREATE DATABASE test' + test + ';USE test' + test); 15 | }); 16 | 17 | after(function () { 18 | alasql('DROP DATABASE test' + test); 19 | }); 20 | 21 | it('1. Simple Replace', function (done) { 22 | alasql('CREATE TABLE one (a STRING)'); 23 | alasql('INSERT INTO one VALUES (".a."),("_._")'); 24 | var res = alasql('COLUMN OF SELECT REPLACE(a,".","_") FROM one'); 25 | //assert.deepEqual(res, [ '_a_', '___' ]); 26 | done(); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /test/test428.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | /* 7 | Test for issue #379 8 | */ 9 | 10 | var test = 428; 11 | 12 | describe('Test ' + test + ' UUID()', function () { 13 | before(function () { 14 | alasql('CREATE DATABASE test' + test + ';USE test' + test); 15 | }); 16 | 17 | after(function () { 18 | alasql('DROP DATABASE test' + test); 19 | }); 20 | 21 | it('1. Simple test GUID', function (done) { 22 | var res = alasql('=UUID()'); 23 | assert( 24 | !!res.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i) 25 | ); 26 | done(); 27 | }); 28 | 29 | it('2. DEFAULT GUID', function (done) { 30 | alasql('CREATE TABLE one (a INT, b STRING DEFAULT UUID())'); 31 | alasql('INSERT INTO one(a) VALUES (1)'); 32 | var res = alasql('SELECT * FROM one'); 33 | assert( 34 | !!res[0].b.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i) 35 | ); 36 | done(); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /test/test431.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | describe('Test 431 error in 8 and 108 convert formats', function () { 6 | it('1. Should format time correctly', function (done) { 7 | var date = new Date(2016, 0, 1, 0, 0, 0); 8 | var correctTime = '00:00:00'; 9 | var res = alasql('SELECT VALUE CONVERT(STRING, ?, 108)', [date]); 10 | assert.equal(res, correctTime); 11 | res = alasql('SELECT VALUE CONVERT(STRING, ?, 8)', [date]); 12 | assert.equal(res, correctTime); 13 | 14 | done(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /test/test432.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | describe('Test 432 Test FIRST(*)', function () { 6 | it('1. FIRST(*)', function (done) { 7 | var data = [ 8 | {a: 1, b: 10, c: 1}, 9 | {a: 1, b: 20, c: 2}, 10 | {a: 2, b: 20, c: 3}, 11 | {a: 2, b: 30, c: 4}, 12 | {a: 2, b: 30, c: 5}, 13 | ]; 14 | var res = alasql('SELECT *, COUNT(b) FROM ? GROUP BY a,b', [data]); 15 | assert.deepEqual(res, [ 16 | {a: 1, b: 10, 'COUNT(b)': 1, c: 1}, 17 | {a: 1, b: 20, 'COUNT(b)': 1, c: 2}, 18 | {a: 2, b: 20, 'COUNT(b)': 1, c: 3}, 19 | {a: 2, b: 30, 'COUNT(b)': 2, c: 4}, 20 | ]); 21 | 22 | var res = alasql('SELECT *, COUNT(b) FROM ? GROUP BY a', [data]); 23 | // console.log(res); 24 | assert.deepEqual(res, [ 25 | {a: 1, 'COUNT(b)': 2, b: 10, c: 1}, 26 | {a: 2, 'COUNT(b)': 3, b: 20, c: 3}, 27 | ]); 28 | done(); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/test433.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 433 - read csv from variable', function () { 7 | it('works from csv variable', function () { 8 | var res = alasql('SELECT * FROM CSV(?, {"headers": true, "fromString": true})', [ 9 | 'A,B,C\n10,20,30\n20,30,40', 10 | ]); 11 | 12 | assert.deepEqual(res, [ 13 | {A: 10, B: 20, C: 30}, 14 | {A: 20, B: 30, C: 40}, 15 | ]); 16 | }); 17 | 18 | it('works from csv variable - async', function (done) { 19 | var sql = 'SELECT * FROM CSV(?, {"headers": false, "fromString": true})'; 20 | alasql(sql, ['a,b,c\nd,e,f\none,two,three\n'], function (res) { 21 | assert.deepEqual(res, [ 22 | {0: 'a', 1: 'b', 2: 'c'}, 23 | {0: 'd', 1: 'e', 2: 'f'}, 24 | {0: 'one', 1: 'two', 2: 'three'}, 25 | ]); 26 | done(); 27 | }); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /test/test434.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 434 - joins SELECT', function () { 7 | const test = '434'; // insert test file Number 8 | 9 | before(function () { 10 | alasql('create database test' + test); 11 | alasql('use test' + test); 12 | 13 | alasql('CREATE TABLE aaa(firstValue, secondValue)'); 14 | alasql('INSERT INTO aaa VALUES(1, 2)'); 15 | alasql('CREATE TABLE bbb(leftSide, rightSide)'); 16 | alasql('INSERT INTO bbb VALUES(1, 2)'); 17 | }); 18 | 19 | after(function () { 20 | alasql('drop database test' + test); 21 | }); 22 | 23 | it('does not throw error on join SELECT', function () { 24 | var res = alasql( 25 | 'SELECT * FROM aaa JOIN (SELECT leftSide FROM bbb) AS bLeft ON (aaa.firstValue = bLeft.leftSide)' 26 | ); 27 | 28 | assert.equal(res.length, 1); 29 | 30 | // TODO: The test currently does not pass. Now, the wrong value is returned. 31 | //assert.deepEqual(res, [{firstValue : 1, secondValue : 2, rightSide : 2}]); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /test/test609.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 609 - Insert into table ', function () { 7 | it('values', function () { 8 | alasql.parse('insert into abc values (1,2,3)'); 9 | }); 10 | 11 | it('value', function () { 12 | alasql.parse('insert into abc value (1,2,3)'); 13 | }); 14 | 15 | it('(skip values)', function () { 16 | alasql.parse('insert into abc (1,2,3)'); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /test/test610.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 610 - SQL added user defined function', function () { 7 | it('A) Sync', function () { 8 | var res = alasql( 9 | 'CREATE FUNCTION abc AS ``function(x) { return x*x; }``;select VALUE abc(2); CREATE FUNCTION abc AS ``function(x) { return x*x*x; }``;select value abc(2);' 10 | ); 11 | assert.deepEqual(res, [1, 4, 1, 8]); 12 | }); 13 | 14 | it('B) Async', function (done) { 15 | // 16 | alasql([ 17 | 'CREATE FUNCTION abc AS ``function(x) { return x*x; }``', 18 | 'SELECT VALUE abc(2)', 19 | 'CREATE FUNCTION abc AS ``function(x) { return x*x*x; }``', 20 | 'SELECT VALUE abc(2)', 21 | ]).then(function (res) { 22 | assert.deepEqual(res, [1, 4, 1, 8]); 23 | done(); 24 | }); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /test/test614.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test614.xlsx -------------------------------------------------------------------------------- /test/test615.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 615 - Read empty and non-empty excel files', function () { 7 | it('A) Load empty excel file', function (done) { 8 | alasql('SELECT * FROM XLSX("' + __dirname + '/test615.xlsx")', [], function (res) { 9 | assert.equal(res.length, 0); 10 | done(); 11 | }); 12 | }); 13 | 14 | it('B) Load non-empty excel file', function (done) { 15 | alasql('SELECT * FROM XLSX("' + __dirname + '/test614.xlsx")', [], function (res) { 16 | var dataPresent = res.length > 0; 17 | assert.ok(dataPresent); 18 | done(); 19 | }); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /test/test615.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test615.xlsx -------------------------------------------------------------------------------- /test/test616.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | var test = '616'; // insert test file number 7 | 8 | describe('Test ' + test + ' - Foreign keys on created database', function () { 9 | it("Check foreign key on a created database doesn't fail", function (done) { 10 | var db = new alasql.Database(); 11 | 12 | db.exec('CREATE TABLE Parent( ParentId integer, CONSTRAINT PK_Parent PRIMARY KEY(ParentId) )'); 13 | db.exec( 14 | 'CREATE TABLE Child( ChildId integer, CONSTRAINT FK_Child_Parent FOREIGN KEY (ChildId) REFERENCES Parent(ParentId) )' 15 | ); 16 | db.exec('INSERT INTO Parent(ParentId) VALUES(1)'); 17 | assert.doesNotThrow(function () { 18 | db.exec('INSERT INTO Child(ChildId) VALUES(1)'); 19 | }); 20 | done(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /test/test619.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | // Test for issue #917 7 | 8 | describe('Test 619 calling aggregate functions on empty sets', function () { 9 | var test = 619; 10 | 11 | before(function () { 12 | alasql('CREATE DATABASE test' + test + ';USE test' + test); 13 | }); 14 | 15 | after(function () { 16 | alasql('DROP DATABASE test' + test); 17 | }); 18 | 19 | it('1. Should always return undefined', function () { 20 | res = alasql('SELECT STDDEV(col) AS Result FROM ? WHERE 1=0', [[{col: 1}, {col: 2}]]); 21 | assert.equal(res[0]['Result'], undefined); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test620.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | /* 7 | Test for issue #965 8 | */ 9 | 10 | var test = 620; 11 | 12 | describe('Test ' + test + ' ORDER BY direction when converting AST to string', function () { 13 | it('1. Should preserve the direction', function () { 14 | var sql = 'SELECT * FROM cities WHERE population < 3500000 ORDER BY population DESC'; 15 | assert.equal(sql, alasql.parse(sql).toString()); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /test/test622.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | /* 7 | Test for issue #972 8 | */ 9 | 10 | var test = 622; 11 | 12 | describe('Test ' + test + ' Converting syntax tree to SQL with multple joins', function () { 13 | it('1. Same SQL when parsed', function () { 14 | var sql = 15 | 'SELECT * FROM cities AS c INNER JOIN state AS s ON c.state_id = s.id INNER JOIN country AS c2 ON s.country_id = c2.id'; 16 | assert.equal(sql, alasql.parse(sql).toString()); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /test/test623.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | var test = '623'; // insert test file number 7 | 8 | describe('Test ' + test + ' - group concat', function () { 9 | var data; 10 | var res; 11 | 12 | it('A) int concat', function () { 13 | data = [ 14 | {a: 1, b: 10}, 15 | {a: 2, b: 20}, 16 | {a: 1, b: 30}, 17 | ]; 18 | res = alasql('SELECT a, GROUP_CONCAT(b) AS b FROM ? GROUP BY a', [data]); 19 | assert.equal(res[0].b, '10,30'); 20 | assert.equal(res[1].b, '20'); 21 | }); 22 | 23 | it('B) string values', function () { 24 | data = [ 25 | {a: 1, b: 'x'}, 26 | {a: 2, b: 'y'}, 27 | {a: 1, b: 'z'}, 28 | ]; 29 | res = alasql('SELECT a, GROUP_CONCAT(b) AS b FROM ? GROUP BY a', [data]); 30 | assert.equal(res[0].b, 'x,z'); 31 | assert.equal(res[1].b, 'y'); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /test/test625.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 625', function () { 7 | it('1. Get sheet by position 0', function (done) { 8 | alasql 9 | .promise(`select * from xlsx("${__dirname}/test625.xlsx",{sheetid:0})`) 10 | .then(function (data) { 11 | assert.equal(data[0]['Data'], 'In.Sheet1'); 12 | done(); 13 | }); 14 | }); 15 | it('2. Get sheet by position 3', function (done) { 16 | alasql 17 | .promise(`select * from xlsx("${__dirname}/test625.xlsx",{sheetid:3})`) 18 | .then(function (data) { 19 | assert.equal(data[0]['Data'], 'In.Unknown'); 20 | done(); 21 | }); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test625.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlaSQL/alasql/0d5c9816659bde946c01a2d6ebb8d062161a1976/test/test625.xlsx -------------------------------------------------------------------------------- /test/test626.csv: -------------------------------------------------------------------------------- 1 | "n","fr" 2 | 1,"un" 3 | 2,"deux" 4 | -------------------------------------------------------------------------------- /test/test626.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } else { 5 | __dirname = '.'; 6 | } 7 | 8 | describe('Test 626 join on CSV file', function () { 9 | var test = 626; 10 | 11 | before(function () { 12 | alasql('CREATE DATABASE test' + test + ';USE test' + test); 13 | }); 14 | 15 | after(function () { 16 | alasql('DROP DATABASE test' + test); 17 | }); 18 | 19 | it('1. can select with a join on a CSV file', function (done) { 20 | alasql( 21 | 'SELECT EN.n, EN.en, FR.fr from ? EN LEFT JOIN CSV("' + 22 | __dirname + 23 | '/test626.csv") FR on EN.n = FR.n', 24 | [ 25 | [ 26 | {n: 1, en: 'one'}, 27 | {n: 2, en: 'two'}, 28 | ], 29 | ], 30 | function (res) { 31 | assert.deepEqual(res, [ 32 | {n: 1, en: 'one', fr: 'un'}, 33 | {n: 2, en: 'two', fr: 'deux'}, 34 | ]); 35 | done(); 36 | } 37 | ); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /test/test804.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 804 - alasql.use on non-existant DB', function () { 7 | it("Don't set alasql.useid to non-existant DB", function () { 8 | try { 9 | alasql.use('NotRealDatabase'); 10 | } catch (error) {} 11 | assert.notEqual(alasql.useid, 'NotRealDatabase'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /test/test805.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | var current_timestamp = 'CURRENT_TIMESTAMP'; 7 | var test = '805'; // insert test file number 8 | 9 | describe( 10 | 'Test ' + 11 | test + 12 | ' - yy.FuncValue for CURRENT_TIMESTAMP returning correct variable string, NOT function string', 13 | function () { 14 | it('A) toString() returns correct value', function () { 15 | var funcValue = new alasql.yy.FuncValue({funcid: current_timestamp}); 16 | 17 | var result = funcValue.toString(); 18 | 19 | assert.equal(result, current_timestamp); 20 | }); 21 | 22 | it('B) SELECT CURRENT_TIMESTAMP query returns a date/time value', function () { 23 | var sql = `SELECT ${current_timestamp}`; 24 | var result = alasql(sql); 25 | 26 | assert.equal( 27 | new Date(result[0][current_timestamp]).toDateString(), 28 | new Date().toDateString() 29 | ); 30 | }); 31 | } 32 | ); 33 | -------------------------------------------------------------------------------- /test/test806.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 806 - INSERT statement to string has parenthesis around values.', function () { 7 | it("Insert's toString() returns values within parenthesis", function () { 8 | var expectedToStringValue1 = "INSERT INTO test VALUES (555,'String',NULL,2.4)"; 9 | var expectedToStringValue2 = 10 | "INSERT INTO cities VALUES ('Rome',2863223),('Paris',2249975),('Berlin',3517424),('Madrid',3041579)"; 11 | 12 | var statements = alasql.parse(expectedToStringValue1 + ';' + expectedToStringValue2).statements; 13 | 14 | assert.equal(statements[0].toString(), expectedToStringValue1); 15 | assert.equal(statements[1].toString(), expectedToStringValue2); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /test/test816.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('..'); 4 | } 5 | 6 | describe('Test 816 - ast.toString() causes repeated aliases', function () { 7 | it('Should parse query to AST, then stringify back to the same query', function () { 8 | var query = 'SELECT genre, title AS t, LENGTH(title) AS length FROM tbl AS t1'; 9 | var ast = alasql.parse(query); 10 | assert.strictEqual(ast.toString(), query); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /test/test819.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('../dist/alasql'); 4 | } 5 | 6 | describe('Test 819 GROUP BY with CASE', function () { 7 | it('1. Use GROUP BY with CASE with IS NULL', function (done) { 8 | var data = [ 9 | {id: 'id1', alternativeId: undefined}, 10 | {id: 'id2', alternativeId: undefined}, 11 | {id: 'id2', alternativeId: undefined}, 12 | {id: undefined, alternativeId: 'id2'}, 13 | {id: undefined, alternativeId: 'id3'}, 14 | ]; 15 | 16 | var res = alasql( 17 | 'SELECT COUNT(*) FROM ? GROUP BY CASE WHEN id IS NULL THEN alternativeId ELSE id END', 18 | [data] 19 | ); 20 | assert.deepEqual(res, [{'COUNT(*)': 1}, {'COUNT(*)': 3}, {'COUNT(*)': 1}]); 21 | done(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /test/test845.js: -------------------------------------------------------------------------------- 1 | if (typeof exports === 'object') { 2 | var assert = require('assert'); 3 | var alasql = require('../dist/alasql'); 4 | } 5 | 6 | /* 7 | Test for issue #845 8 | */ 9 | 10 | var test = '845'; // insert test file number 11 | 12 | describe('Test ' + test + ' - use NOW() function', function () { 13 | it('1a. NOW() as String', function () { 14 | var res = alasql('SELECT NOW() AS now'); 15 | //2022-02-25 19:21:27.839 16 | assert(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}/.test(res[0].now)); 17 | }); 18 | 19 | it('1b. NOW() as Date', function () { 20 | alasql.options.dateAsString = false; 21 | var res = alasql('SELECT NOW() AS now'); 22 | //2022-02-25 19:21:27.839 23 | assert(res[0].now instanceof Date); 24 | }); 25 | 26 | it('2. CONVERT with NOW() as an argument', function () { 27 | var res = alasql('SELECT CONVERT(STRING,NOW(),1) AS conv'); 28 | //02/25/22 29 | assert(/\d{2}\/\d{2}\/\d{2}/.test(res[0].conv)); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "interface-name": [true, "never-prefix"], 4 | "whitespace": [false] 5 | } 6 | } 7 | --------------------------------------------------------------------------------