Features
SQL & Graph API
* feat(func): add rule_id func by carlclone in https://github.com/lf-edge/ekuiper/pull/1705
* feat(func): change compress implementation to `github.com/klauspost/compress` , add zstd compressor/decompressor by carlclone in https://github.com/lf-edge/ekuiper/pull/1743
* feat: support expression for array index in SelectStmt by Yisaer in https://github.com/lf-edge/ekuiper/pull/1750
* feat(func): add delay function by ngjaying in https://github.com/lf-edge/ekuiper/pull/1759
* fea(state): support get_keyed_state function to get data in redis by superrxan in https://github.com/lf-edge/ekuiper/pull/1752
* feat: support validate set-returning-functions in parser by Yisaer in https://github.com/lf-edge/ekuiper/pull/1804
* feat: support projectset plan by Yisaer in https://github.com/lf-edge/ekuiper/pull/1812
* feat: support array_create and keys functions by Yisaer in https://github.com/lf-edge/ekuiper/pull/1871
* feat(graph): support source node refer to created stream by ngjaying in https://github.com/lf-edge/ekuiper/pull/1873
* feat(graph): support join lookup table by ngjaying in https://github.com/lf-edge/ekuiper/pull/1879
* feat: support more functions by Yisaer in https://github.com/lf-edge/ekuiper/pull/1883
* feat: add . for object field by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1877
* feat: support more object functions by Yisaer in https://github.com/lf-edge/ekuiper/pull/1888
* feat: support for more medium-priority array funcs by wangxye in https://github.com/lf-edge/ekuiper/pull/1904
Source & Sink
* feat(sink): add http request/response body to rest sink log when exception occurred by carlclone in https://github.com/lf-edge/ekuiper/pull/1713
* feat(sink): file sink supports various file types by ngjaying in https://github.com/lf-edge/ekuiper/pull/1720
* feat(sink): file sink rolling support by ngjaying in https://github.com/lf-edge/ekuiper/pull/1737
* feat: remove zmq from EdgeX source by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1760
* feat(sink): kafka sink plugin by carlclone in https://github.com/lf-edge/ekuiper/pull/1753
* feat: support limit connections for sql sink by Yisaer in https://github.com/lf-edge/ekuiper/pull/1761
* feat(plugin): support sink/source for dm database by Yisaer in https://github.com/lf-edge/ekuiper/pull/1797
* feat(sink): add file sink/source compress support by carlclone in https://github.com/lf-edge/ekuiper/pull/1807
* fea(sink): support Redis sink write data with multiple keys by superrxan in https://github.com/lf-edge/ekuiper/pull/1841
* feat: support more source for json list object by Yisaer in https://github.com/lf-edge/ekuiper/pull/1842
* feat: add sink common property: fields by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1834
* feat: introduce sendManager in util by Yisaer in https://github.com/lf-edge/ekuiper/pull/1858
* feat: add sink common property: dataField by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1896
Extensions
* fea(wasm): add wasmedge support by superrxan in https://github.com/lf-edge/ekuiper/pull/1860
Operations
* feat: support schedule rule by Yisaer in https://github.com/lf-edge/ekuiper/pull/1901
Dependency Updates
* fix(redis): upgrade redis client from v7 to v9 by superrxan in https://github.com/lf-edge/ekuiper/pull/1715
* chore: upgrade base image go version to 1.20 by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1718
* chore: upgrade redis to v9 by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1730
* chore: upgrade go version to 1.20 by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1732
* feat: introduce cgo free sqlite by Yisaer in https://github.com/lf-edge/ekuiper/pull/1749
* feat: upgrade go-mod-messaging to v3 by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1758
* feat: upgrade clickhouse client to v2 by Yisaer in https://github.com/lf-edge/ekuiper/pull/1821
* fix(docker): use debian:buster-slim for slim docker image by superrxan in https://github.com/lf-edge/ekuiper/pull/1831
* chore: edgeX v3 mod update by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1932
Build & CI
* chore: add check for go tidy by Yisaer in https://github.com/lf-edge/ekuiper/pull/1728
* chore: introduce revive to check lint by Yisaer in https://github.com/lf-edge/ekuiper/pull/1723
* ci: introduce revive check into ci by Yisaer in https://github.com/lf-edge/ekuiper/pull/1735
* ci: check go licenses by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1784
* fea(ci): support codecov for ekuiper by superrxan in https://github.com/lf-edge/ekuiper/pull/1684
* chore: fix zmq install script by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1798
* feat: updates for build core by ngjaying in https://github.com/lf-edge/ekuiper/pull/1823
* chore: remove sed package by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1868
* ci(lint): introduce golangci-lint by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1872
* ci: add commit message checker by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1886
Improvements
* refactor(sink): file sink refactor by ngjaying in https://github.com/lf-edge/ekuiper/pull/1714
* refactor: refactor dbPool by Yisaer in https://github.com/lf-edge/ekuiper/pull/1785
* refactor(rule): unify rule state for stopped rules by ngjaying in https://github.com/lf-edge/ekuiper/pull/1806
* refactor: use go builtin multi error wrapping to optimize error by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1808
* refactor: replace strings.Title with cases.Title by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1848
* refactor: fix deprecated/unreachable codes by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1849
* refactor: switch ignoreCase default value to false by ngjaying in https://github.com/lf-edge/ekuiper/pull/1856
* refactor: move features out of core by ngjaying in https://github.com/lf-edge/ekuiper/pull/1914
Docs
* doc(sink): file sink new properties by ngjaying in https://github.com/lf-edge/ekuiper/pull/1729
* doc(sink): file sink doc and meta by ngjaying in https://github.com/lf-edge/ekuiper/pull/1741
* docs: add slicing expression docs by Yisaer in https://github.com/lf-edge/ekuiper/pull/1754
* doc(example): create template and the first case by ngjaying in https://github.com/lf-edge/ekuiper/pull/1792
* docs: add docs for the unnest function by Yisaer in https://github.com/lf-edge/ekuiper/pull/1832
* docs: add package import spec by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1878
* docs: add docs for batch sink by Yisaer in https://github.com/lf-edge/ekuiper/pull/1889
* docs: add docs for functions by Yisaer in https://github.com/lf-edge/ekuiper/pull/1895
* docs: add docs for the context method by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1920
* docs: add docs for the newly array funcs by wangxye in https://github.com/lf-edge/ekuiper/pull/1930
Fixes & Other Changes
* fix(tuple): group tuple content must clone before pick by ngjaying in https://github.com/lf-edge/ekuiper/pull/1719
* chore: fix image name error by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1722
* fix(doc): fix neuron url env wrong key by ngjaying in https://github.com/lf-edge/ekuiper/pull/1725
* chore: fix image name error by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1727
* style: enable blank-imports check and fix by Yisaer in https://github.com/lf-edge/ekuiper/pull/1733
* fix(sink): shadowed variable cause the inner err unhandled by carlclone in https://github.com/lf-edge/ekuiper/pull/1726
* style: enable error-return check and fix by Yisaer in https://github.com/lf-edge/ekuiper/pull/1734
* style: enable range/if-return check and fix by Yisaer in https://github.com/lf-edge/ekuiper/pull/1738
* style: enable receiver-nameing check and fix by Yisaer in https://github.com/lf-edge/ekuiper/pull/1740
* style: enable superfluous-else check and fix by Yisaer in https://github.com/lf-edge/ekuiper/pull/1742
* fix(doc): fix parse error in file sink dynamic properties by ngjaying in https://github.com/lf-edge/ekuiper/pull/1747
* fix(plugin): add influx2 in release stage by superrxan in https://github.com/lf-edge/ekuiper/pull/1748
* test: fix flaky test by Yisaer in https://github.com/lf-edge/ekuiper/pull/1756
* fix(mqtt): sync mqtt connection state by ngjaying in https://github.com/lf-edge/ekuiper/pull/1763
* fix(ci): remove lint check in push by ngjaying in https://github.com/lf-edge/ekuiper/pull/1764
* fix(sink): reset sink to return io error if network problem happens by ngjaying in https://github.com/lf-edge/ekuiper/pull/1767
* chore: revert setting zmq in dev images by ngjaying in https://github.com/lf-edge/ekuiper/pull/1771
* chore: add zmq install script by ngjaying in https://github.com/lf-edge/ekuiper/pull/1772
* chore: remove plugin check for zmq, will add back later by ngjaying in https://github.com/lf-edge/ekuiper/pull/1773
* fix(meta): add missing field for plugin json, or labels can not show in ui by superrxan in https://github.com/lf-edge/ekuiper/pull/1781
* fix(docs): add more detail for kafka sink by superrxan in https://github.com/lf-edge/ekuiper/pull/1779
* fix (doc): update edgex command messaging tutorial doc by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1786
* Update redisKv.go by huabanyu12 in https://github.com/lf-edge/ekuiper/pull/1776
* fix(meta): update object type meta by ngjaying in https://github.com/lf-edge/ekuiper/pull/1788
* fix(ci): support path and children coexistence by Swilder-M in https://github.com/lf-edge/ekuiper/pull/1794
* feat(sink): fix kafka sink plugin write delay , refactor to IOErr ret… by carlclone in https://github.com/lf-edge/ekuiper/pull/1783
* fix(ci): get code coverage by superrxan in https://github.com/lf-edge/ekuiper/pull/1799
* fix(sink): fix file sink line seperator problems by ngjaying in https://github.com/lf-edge/ekuiper/pull/1803
* fix(sink): fix file sink doc by carlclone in https://github.com/lf-edge/ekuiper/pull/1810
* fix(test): avoid random fail of format test by ngjaying in https://github.com/lf-edge/ekuiper/pull/1811
* chore: deprecate sink runAsync property by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1809
* fix(ci): comment wasm-edge ut temporarily by superrxan in https://github.com/lf-edge/ekuiper/pull/1825
* feat: support projectset operation for tupleRow by Yisaer in https://github.com/lf-edge/ekuiper/pull/1814
* fix(ci): get code coverage output in ut by superrxan in https://github.com/lf-edge/ekuiper/pull/1817
* fix(plugin): provide more info when plugin register fail by superrxan in https://github.com/lf-edge/ekuiper/pull/1805
* fix(doc): fix mqtt sink/source doc by carlclone in https://github.com/lf-edge/ekuiper/pull/1826
* fix(metrics): fix source processLatency in metrics by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1829
* feat: support projesetset for collection by Yisaer in https://github.com/lf-edge/ekuiper/pull/1827
* fix(meta): add missing keyField to sql sink by ngjaying in https://github.com/lf-edge/ekuiper/pull/1837
* docs: fix typos by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1839
* fix(portable): delay plugin stop to avoid errors for instant restart by ngjaying in https://github.com/lf-edge/ekuiper/pull/1838
* refactor: support DefaultContext.DecodeIntoList by Yisaer in https://github.com/lf-edge/ekuiper/pull/1833
* chore: use `t.Logf` in unit tests by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1840
* fix(sink): fix file sink reopen append problem by ngjaying in https://github.com/lf-edge/ekuiper/pull/1845
* fix: get correct lang by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1846
* docs: fix spelling by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1843
* fix: use print-style functions by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1847
* fix(topo): gc leaks with time.Tick by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1851
* fix(service/model): apply protocol type to all by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1852
* test: add unit to time.Sleep by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1854
* style: align with gofumpt format style by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1857
* fix(source): fix json value for http pull by superrxan in https://github.com/lf-edge/ekuiper/pull/1859
* fix: use print-style functions by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1862
* refactor: use pointer receiver by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1864
* refactor: fix unreachable codes by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1863
* refactor: remove unused code by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1855
* fix: process unhandled errors by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1861
* fix: keep the order for delimited format by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1866
* fix: avoid to call T.Fatal from a non-test goroutine by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1870
* style: sort go imports by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1844
* refactor: remove unnecessary conversion by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1876
* fix: send manager should be enlarged during runWithTicker by Yisaer in https://github.com/lf-edge/ekuiper/pull/1874
* fix: fix flaky test by Yisaer in https://github.com/lf-edge/ekuiper/pull/1880
* feat: introduce sendManager in sink by Yisaer in https://github.com/lf-edge/ekuiper/pull/1875
* fix: fix send manager in batch sink by Yisaer in https://github.com/lf-edge/ekuiper/pull/1882
* chore(lint): replace curl with go install by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1885
* fix(docs): add external ai function tutorial by superrxan in https://github.com/lf-edge/ekuiper/pull/1884
* feat(graph): update the parse error messages by ngjaying in https://github.com/lf-edge/ekuiper/pull/1892
* docs: fix an unpaired backticks problem by Chasing1020 in https://github.com/lf-edge/ekuiper/pull/1897
* ci(tests): fix a potential apt hanging by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1900
* refactor(parser): use strings.NewReplacer to avoid using placeholders by Chasing1020 in https://github.com/lf-edge/ekuiper/pull/1902
* ci(codecov): fix codecov config by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1906
* fix(doc): remove a duplicate table row by LenaLenaPan in https://github.com/lf-edge/ekuiper/pull/1894
* fixed translation error. by twomorehours in https://github.com/lf-edge/ekuiper/pull/1891
* fix(plugin): fix data format error in sql plugin, remove default conf… by superrxan in https://github.com/lf-edge/ekuiper/pull/1907
* chore: update jmeter update location by ngjaying in https://github.com/lf-edge/ekuiper/pull/1910
* fix: exception metric is wrong by Rui-Gan in https://github.com/lf-edge/ekuiper/pull/1908
* fix(rule): handle crash when call createState by superrxan in https://github.com/lf-edge/ekuiper/pull/1903
* test(pkg): add unit tests by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1899
* ci(tests/codecov): remove redundant code by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1911
* docs: revise background for external service doc by Yisaer in https://github.com/lf-edge/ekuiper/pull/1909
* ci(fvt-tests): replace apt with apt-get by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1918
* fix(sql): update sql should use single quote literal by ngjaying in https://github.com/lf-edge/ekuiper/pull/1921
* fix: fix schedule rule state by Yisaer in https://github.com/lf-edge/ekuiper/pull/1916
* test(pkg): add test cases by xjasonlyu in https://github.com/lf-edge/ekuiper/pull/1913
* fix(doc): add external functions doc by superrxan in https://github.com/lf-edge/ekuiper/pull/1919
* fix: revise schedule rule state and doc by Yisaer in https://github.com/lf-edge/ekuiper/pull/1922
* fix: assert mapdata in fields by Yisaer in https://github.com/lf-edge/ekuiper/pull/1924
* fix(doc): typo in object_construct doc by ngjaying in https://github.com/lf-edge/ekuiper/pull/1926
* fix(state): add extStateType config by superrxan in https://github.com/lf-edge/ekuiper/pull/1923
* fix(docs): fix typo for unnest by superrxan in https://github.com/lf-edge/ekuiper/pull/1925
* fix(proto): support enum type by ngjaying in https://github.com/lf-edge/ekuiper/pull/1931
* test: add benchmark for getTuples by Yisaer in https://github.com/lf-edge/ekuiper/pull/1929
* fix(op): filter collection should stop propagation by ngjaying in https://github.com/lf-edge/ekuiper/pull/1933
Breaking Changes
* Configuration item "ignoreCase" defaults to false. You can revert its default value in `etc/kuiper.yaml` or set environment variable KUIPER__BASIC__IGNORECASE: "true"
* InfluxDB sink and InfluxDBv2 sink `fields` property format change from string to []string. Please update the rules which use this property to the new format.
New Contributors
* Yisaer made their first contribution in https://github.com/lf-edge/ekuiper/pull/1728
* huabanyu12 made their first contribution in https://github.com/lf-edge/ekuiper/pull/1776
* xjasonlyu made their first contribution in https://github.com/lf-edge/ekuiper/pull/1839
* Chasing1020 made their first contribution in https://github.com/lf-edge/ekuiper/pull/1897
* LenaLenaPan made their first contribution in https://github.com/lf-edge/ekuiper/pull/1894
* twomorehours made their first contribution in https://github.com/lf-edge/ekuiper/pull/1891
* wangxye made their first contribution in https://github.com/lf-edge/ekuiper/pull/1904
**Full Changelog**: https://github.com/lf-edge/ekuiper/compare/1.9.0...1.10.0