├── .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 |
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 |
--------------------------------------------------------------------------------