Skip to content

kdb+ 3.1 Release Notes

This page details the latest features and improvements released to kdb+ 3.1.

2016.01.27

Fixes and improvements

  • continously throwing 'close for http posts where multiple reads were necessary and connection was closed by client before all content received.

  • 16 vs j was corrupting memory for j > 2 billion, since v3.0. e.g.

    q)16 vs 9223372036854775807;.Q.gc[] / gc can help trigger a crash on a corrupted heap
  • on disk sort, and -23!x could crash for compressed enums. e.g.

    q).z.zd:17 1 0;`:x set `sym!2129916#0i;-23!get`:x;hdel`:x;1b

2015.05.22

Fixes and improvements

  • parsing as minutes could crash if the minutes were partial. e.g.

    q)h:hopen`:file.txt;h(4091#"a"),",23:3";hclose h;("*U";",")0:`:file.txt

2015.01.20

Fixes and improvements

  • select count x was incorrectly ignoring the argument to count for certain queries, since v3.1 2013.05.15. e.g.

    q)([]enlist 0)~select count b where b>2 from ([]a:`p#`a`a`b`c;b:til 4)where a=`a

2015.01.12

Fixes and improvements

  • Find (and hence ops that use find) was slow for some data distributions, since 2014.12.05. e.g.

    q)l:1000000#`$til[10]#\:.Q.a;s:10000#-2#l;system"ts s in asc l"

2014.12.05

Fixes and improvements

  • mapped nested find was crashing, since 2014.11.26. e.g.

    q)`:f set enlist"ab";()?get`:f

2014.11.26

Fixes and improvements

  • in,bin was erroneously sensitive to sort attr with compound types. e.g.

    q)(10b;10b)~([] a:0 1; b:`)in/:(([] a:0 0; b:`);([] a:`s#0 0; b:`))
  • find could crash for ()?int vector. e.g.

    q)()?til 99
  • min/max on an empty sorted vector was returning null. e.g.

    q)all~/'[(min;max)@/:\:(`s#0#0;0#0)]

2014.09.29

Fixes and improvements

  • In a multithreaded-query, file decompression on windows was contending for internal locks inefficiently.

  • vector [bin|binr] matrix was erroneously executing as vector ? matrix since 3.0 2012.07.26. e.g.

    q)(-360 124 bin(34 35;37 38))~-360 124 bin/:(34 35;37 38)

2014.08.22

Fixes and improvements

  • w32 only - bin search on tables when table had no `p# was erroneous. e.g.

    q)all{0 1~([]sym:`a`b;date:.z.d)bin([]sym:`a`b;date:.z.d)}each til 10000
  • (wsum)0 was being interpreted as exit 0. Now throws 'wsum.

  • When trying to append to a nested mappable file written by v2.8 or prior, throw '"no append to q2 file format"

    rather than 'type.
  • q.k - .Q.l now binds data to vars as soon as it is loaded to help overcome this edge-case of enum dependencies

    q)a:`b`a;`:db/a set a;`:db/b set ([]b:`s#`a?`a`b);delete a from `.;system"l db"
  • q.k - save`:t.xls did not correctly encode <, > and & using XML entities. e.g.

    q)t:update SymbolColumn:`$StringColumn from ([]StringColumn:("a<b";"a,b";"a>b";"a&b"));save `:t.xls
  • q.k - .Q.MAP now works with segmented databases.

  • x like "" would not match ` under some common scenarios. e.g.

    q)delete s from`.;(`s?`a`)like ""

2014.07.01

Fixes and improvements

  • casting negative times was truncating biased towards 0 rather than -0W. e.g.

    q)-00:06 -00:05 -00:05~`minute$t:neg[00:05t]+ -1 0 1
    q)-00:06 -00:05 -00:05~`minute$t:neg[0D00:05]+ -1 0 1

2014.06.30

Fixes and improvements

  • F wsum B was not ignoring nulls. Also allow B wsum B. e.g.

    q)1 2f~(1 0n wsum 10b;101b wsum 101b)
  • where clause had erronesouly relaxed the expected type. e.g.

    q)select from([]0 1)where{}

2014.06.22

New

  • improved performance of amending keyed tables where a value column has a `g attr. e.g.

    q)a:50#t:([a:`u#-15000000?0]b:`g#15000000#-5000000?0);
    q)system each("ts {t[x]:a[x]}enlist each exec a from a";"ts {t[x]:a[x]}each exec a from a";"ts {t[x]:a[x]}select a from a")

Fixes and improvements

  • added optimization for 3 col aj (actually the underlying bin). e.g.

    q)n:10000000;a:([]time:`s#0p+til n;a:`g#n?`2;b:n?10;c:n?10f);b:delete d from update d:c from 10000#a;
    q)\ts aj[`a`b`time;b;a]
    q)\ts (`a`b`time#a)bin`a`b`time#b
  • In very unlikely circumstances, fnd and bin could return the wrong result if the lookup table had >2 billion.

    Also amending a vector with `g attr if > 2 billion elements.
  • Tweaked to work with xinetd/netcat with ipc protocol. Was broken since 2.8 2012.02.05

  • min on a sorted vector with nulls was leaking memory. e.g.

    q)min `s#0n 1;.Q.w[]`used

2014.06.18

Fixes and improvements

  • sorting > 2 billion elements could result in a crash, or be inefficient.

2014.06.03

New

  • expanded mlim (number of mapped nested files) from 251 to 32767.

Fixes and improvements

  • dates outside supported literal domain (1709 thru 2290.12.31) compared with timespan could give wrong answer.

    q)("d"$2921920)>2001.01.01D09:30

2014.05.21

Fixes and improvements

  • list amend was causing a crash when passed a scalar. e.g.

    q)x:1;x[;1]:1
  • Nested indexing of keyed tables was throwing 'type since 2014.03.16. e.g.

    q)(([]rate:1.2 1.3);([]rate:1.2 1.3))~([month:2013.07 2013.08m]rate:1.2 1.3)([]month:(2013.07 2013.08m;2013.07 2013.08m))

2014.05.03

Fixes and improvements

  • aggregating partial expressions would crash across partitioned databases. e.g.

    q)`:p/0/t/`:p/1/t/ set\:([]a:til 10);system"l p";select sum(a+)from t
  • When using .Q.MAP[], select from trade where date=last date, sym in 2#sym was returning data for too many syms.

  • some users requested that the v2.8 lj behaviour be available officially from Kx, now defined as ljf.

  • allow int vector for lhs for take and drop. e.g.

    q)0N!(0 1 2;3 4;5 6 7 8;enlist 9)~0 3 5 9i _ til 10;(til 5;5+til 5)~2 0Ni#til 10
  • ss was entering an infinite loop when passed a vector > 2 billion and pattern > 1 char. e.g

    q)s:(0Wi+32)?.Q.an;ss[s;"ab"]

2014.03.16

Fixes and improvements

  • improve performance of searching on compound key e.g. x:([]a:..)cross([]b:..)

    q)n:1000000;d:.z.d;t1:([]date:d;a:n?`4;b:n?1000f;c:n?1000000);m:100000;t2:([date:d;a:m?`4];b:m?1000f;d:m?1000)
    q)0N!system"ts t1 lj update date:`#date from t2";system"ts t1 lj update date:`s#date from t2"

2014.02.26

(linux only)

Fixes and improvements

  • potential slowdown with memcpy/memove since v3.1 2013.12.11 for systems with libc prior to 2.17. e.g.

    q)v:til 100000000;do[2;0N!system"ts -8!v"]

2014.02.15

Fixes and improvements

  • add scalar extend lhs for wavg, so it is consistent with wsum.

    q)((2 2 2;2)wsum\:1 2 3;(2 2 2;2)wavg\:1 2 3)

2014.02.08

Fixes and improvements

  • \t to set timer interval was broken since 2014.02.07. e.g.

    q)\t 1000

2014.02.07

Fixes and improvements

  • block cat of splayed tables. e.g.

    q)n:til 3;`:test/c/ set([]n;3);system"l test";c,'([]y:n)
  • allow \ts:n expr, as a shortcut for \ts do[n;expr]

  • garbage collect during end of peach could cause crash. e.g.

    start with $q -w 2000 -s 2
    q)enlist each til 10000000;{enlist each til 1000000}peach til 100;

2014.01.24

Fixes and improvements

  • match of mapped nested vectors was incorrect. e.g.

    q)`:t/ set([]x:(1 2;3 4);y:(1 2;5 6));t:get`:t/;t[`x]~t`y

2014.01.22

(non-sse builds only - i.e. all 32bit builds, w64, s64 and l64nosse)

Fixes and improvements

  • 0w<=0w and 0w>=0w were evaluating to 0b since initial v3.1 release.

2013.12.27

Fixes and improvements

  • if the timer interval (\t i) was changed within the timer handler (.z.ts) itself, the next invocation was potentially delayed beyond that interval.

    q).z.ts:{0N!"entry@",string[.z.T],"\n";system"sleep 1";system"t 2000";0N!"exit@:",string[.z.T],"\n";};system"t 3000"

2013.12.11

Fixes and improvements

  • improve performance of bulk amend of vectors with `g# attribute.

    e.g. q)v:10000?10000;r:100000?10000;system"ts @[`g#v;r;:;r]"
  • allow multiple columns to be amended if target is on disk. Previously this was limited to a single column.

    e.g. q)@[`:/path/to/splay/table;`date`sym;{y#x};`p`g]

2013.11.20

Fixes and improvements

  • ij could perform very poorly when lhs had >99 rows, ignoring any attributes on 1st col of rhs

    e.g. q)a:([]a:til 1;b:til 1);b:`a`b xkey update `g#a,c:i from([]a:til 1000)cross([]b:til 1000);(100#a)ij b

2013.11.15

Fixes and improvements

  • serialization of type 97 (mapped nested sym vectors) was incorrect, causing 'badmsg at the receiver, and has potential to corrupt the heap on or crash the sender, since 3.0 2012.09.26.

    e.g. q)`:t/ set([]1 1#`:sym?/:1?`4);-9!-8!get`:t/x
  • Creating boolean vectors from null ints (0b vs ...) was incorrect.

    e.g. q)(1000000000000000b;10000000000000000000000000000000b;1000000000000000000000000000000000000000000000000000000000000000b)~0b vs/:(0Nh;0Ni;0N)

2013.11.03

(w32 build only)

Fixes and improvements

  • iterate was incorrect for J\[j].

    e.g. q)3 2 1 0N~0N 0N 1 2\[3]

2013.11.01

Fixes and improvements

  • J wsum B was slower than v3.0 and was returning F instead of J.

    e.g. q)x:10000000?100;y:`boolean$10000000?2;x wsum y

2013.10.30

NUC (Not Upwardly Compatible)

Not backward compatible. Changes existing behavior.

  • distributed each (i.e. q -s -N) no longer opens connections to slave processes automatically on ports 20000+til N.

    It now requires .z.pd to be defined as a function which returns an int vector of unique handles (must be marked as `u#).
    These handles must not be used for other msgs; peach will close them if it receives anything other than a response msg.
    e.g. q).z.pd:{n:abs system"s";$[n=count handles;handles;[hclose each handles;:handles::`u#hopen each 20000+til n]]}
         q).z.pc:{handles::`u#handles except x;}
         q)handles:`u#`int$();

2013.10.20

(win builds only)

Fixes and improvements

  • export symbol es so it's readable from the c-api. krr is defined as V*krr(S s){es=s;R 0;},es as S __thread es;

2013.10.08

Fixes and improvements

  • Rollback noamend in views from 2013.02.21 as some users have legacy code requiring this. As a rule, do not amend within views.

  • -3!x now more efficient for stringify of enums

    e.g. q)i:50000000?0Wi;e:`t!i;system"ts -3!e"

2013.10.06

Fixes and improvements

  • allow "P"$string .z.d so as to be consistent with "Z"$string .z.d.

  • sorting of vectors of underlying type long was broken where range of values<9e15 with values>9e15.

    e.g. q)n:10;b:(100*a:n?n)+50*floor n#1e17;iasc[b]~iasc a

2013.10.01

Fixes and improvements

  • windows builds could not read compressed files since 3.1 2013.08.13.

  • if creating a compressed file using bad zip args, the temp $ file would be created, and not deleted. Also if a zip cmd were issued whilst in suspended mode before completing the last zip request, kdb+ would seg fault.

2013.09.29

Fixes and improvements

  • 0: was crashing for csv files with > 2 billion rows.

    e.g. q)("BBBBB";enlist",")0:`:data.csv
  • select using a first constraint on a sorted time column was incrementing the rhs arg.

    e.g. q)t:0t;select from([]`s#time:`time$0 1)where time>t;t=0t

2013.09.19

(updated)

Fixes and improvements

  • indexing out of range in a table could wsfull or seg fault.

    e.g. q)select from ([]til 10)where i within(2+count i;4+count i)
  • sse enabled builds could suffer a seg-fault when looking for max of a parted vector.

    e.g. q)max `p#"i"$til 17

2013.09.05

Fixes and improvements

  • update with scalars for linked columns was not retaining type. Root cause was catenate.

    e.g. q)t:([]1 2 3);([]x:1 2 3;p:`t!3#0N)~update p:`t!0N from t
         q)((enlist`x)!enlist 1 2 3),(enlist`p)!`t!enlist 0N

2013.08.28

Fixes and improvements

  • update could update wrong index if the where constraint was on a single column which is sorted.

    e.g. q)t:([id:`s#1 2 3];val:`aa`aa`aa);([id:`s#1 2 3]val:`aa`bb`aa)~update val:`bb from t where id=2
         q)t:([]id:`s#1 2 3;val:`aa`aa`aa);([]id:1 10 3;val:`aa`aa`aa)~update id:10 from t where id=2

2013.08.19

Fixes and improvements

  • the random number generator was not thread-safe. Now the behaviour is as follows

    rng is thread local.
    \S 1234 sets the seed for the rng for the main thread only.
    the rng in a slave thread is assigned a seed based on the slave thread number.
    in multithreaded input mode, the seed is based on socket descriptor.
    instances started on ports 20000 thru 20099 (slave procs, used with e.g. q -s -4) have the main thread's default seed based on the port number.
    e.g. q)10?10
  • q.k - lower/upper now work with enums too

    e.g. q)lower `s?`A`B`C

2013.08.13

(osx only)

Fixes and improvements

  • saving a vector to a file > 2GB was throwing 'filename: Invalid argument

    e.g. q)`:tt set til 268435455

2013.08.02

Fixes and improvements

  • grouping by a sorted time.minute was erroneous since initial release of v3.1.

    e.g. q)t:([] time:asc `time$raze(8#00:10),(16#00:12),(8#00:15));select i by time.minute from t

2013.08.01

Fixes and improvements

  • assigning to .Q.s could cause a crash

    e.g. q).Q.s:{}
  • time.minute would crash under some circumstances within a query, since initial release of v3.1.

    e.g. q)exec i by time.minute from([]time:`s#`time$())

2013.07.18

New

  • .Q.MAP[] now allows the partition field (commonly date) to be used anywhere in a select.

2013.07.16

New

  • If an incoming sync|async msg was processed in order to get to the response message of an outgoing sync msg, and that incoming message caused an error, the connection would be dropped. Now the connection remains open.

Fixes and improvements

  • sum, max, prd, ... were not ignoring nulls when used as a grouped aggregate function in a select, since first release of 3.1.

    e.g. q)select sum a by b from ([] a:1.5 2.5 0n;b:`a`a`a)
  • prd was not ignoring nulls, since v3.0.

    e.g. q)prd 1.2 2.5 0n
  • Accept 64bit ints in addition to 32bit ints to be returned from .z.ac.

  • When using .Q.MAP[], queries that use select date,.. on date partitioned tables were failing. If date is selected, it must be selected as the first column, unadjusted.

2013.07.07

New

  • Following from a discussion on the k4 listbox, {z+x*y}\[x;y;z] is now a built-in function, as x y\z.

    q)ema:{first[y](1-x)\x*y};x:"f"$til 1000000;ema[.1;x]
  • Improved performance of polynomial-evaluation for f sv F; for vectors, F sv F, it is still better to do Horner's rule as in http://kx.com/q/stat.q

    q).2 sv 2 3 4.

2013.07.04

Fixes and improvements

  • equality test of real vectors was not matching 0Ne correctly (sse builds only).

    e.g. q)0N 0Ne=0N 0Ne

2013.07.03

Fixes and improvements

  • delete with a single constraint a sorted|parted column was incorrect.

    e.g. q)t:([]abc:`p#0 0 0 2 2 2);delete from `t where abc=2;([]abc:0 0 0)~t
  • select|update|delete with a single constraint on a sorted time column was incorrect.

    e.g. q)t:([]time:`s#til 10);([]time:0 1 2 3 4)~select from t where time<5

2013.07.02

Fixes and improvements

  • sum, avg of a float vector was not ignoring nulls.

    e.g. q)sum 1 2 3 0Ne
  • sum of a short vector was not ignoring nulls.

    e.g. q)sum 1 2 3 0Nh

2013.06.25

Fixes and improvements

  • file decompression would crash or fail with an incorrect error msg under very rare scenarios, if the uncompressed file length was a multiple of page size, since 2013.03.04. Was throwing "Fatal Error - file decompression faulting from thread which did not open file"

    e.g. q).z.zd:17 2 6;`:zfile set 4080#0x0;{x set ()}each reverse {x set get `:zfile}each `$'10#.Q.a / crash depends on OS behaviour

2013.06.21

Fixes and improvements

  • file decompression was crashing for some nested data, since 3.1T 2013.04.03.

  • writing to a file could corrupt the heap, causing a crash at some point later, since v1.0

    e.g. q)`:test set 3000000#(::);.Q.gc[]

2013.06.18

Fixes and improvements

  • 32bit versions no longer require sse 4.1/4.2

  • q.k - optimization brought in 2013.05.13 should be active only with .Q.MAP[], otherwise incurs unnecessary file operations during select.

  • lt|gt comparison of 0f with 0f gave incorrect value since 2013.06.10, for 32bit builds, windows builds, and solaris on sparc.

    e.g. q)0 0f<0

2013.06.17

(windows only)

Fixes and improvements

  • Windows' builds could not read compressed files that were smaller than the chosen block size; printed "Can't protect memory", and then exited. Since 3.1T 2013.03.04.

    e.g. q).z.zd:17 2 6;`:zfile set asc 1000#0;get`:zfile

2013.06.14

(updated)

New

  • optimize min|max for sorted list.

    e.g. q)x:asc 10000000?1f;system "t min x"
  • heap accounting for reading compressed files is now based on what data is actually read rather than the full vector length,

    and hence -w limits are less likely to be hit.

2013.06.10

Fixes and improvements

  • improved sort performance for vectors of longs.

    e.g. q)v:3300000?100000000;system"t asc v"
  • block neg uuid. Now throws 'type, as in v3.0.

    e.g. q)neg 0Ng

2013.06.09

First production release of kdb+ 3.1.

Fixes and improvements

  • short$() was returning null types instead of typed empty lists, for short < 0.

    e.g. q)-7h$()
  • "C"$"\r" and "C"$"\t" were returning " " instead of "\n"|"\t".

  • multicolumn find (t1?t2) was slow for some scenarios if t1 had an attribute on the first column.

2013.05.15

New

  • cmd line option -u now accepts 0 as a nop.

    improved performance of select .. by sym from t where sym in ..

Fixes and improvements

  • tokens starting with a number and ending with an x were parsing as 0x00 rather than throwing an error, since 2012.05.15.

    e.g. q)1eachx

2013.05.13

New

  • q.k - added .Q.MAP. This retains maps for a partitioned db, providing a performance improvement.

    .Q.MAP[] is NOT recommended for use with compressed data due to memory usage.
    e.g. q)system"l db";.Q.MAP[]
  • check for sse4.1 capability on intel chips on startup, rather than waiting for illegal instruction fault; throws 'sse 4.1 or later.

Fixes and improvements

  • Explicitly using scalar 0N with an enum was not being cast correctly to 0Ni (enums are still 32bit ints).

    e.g. q)`s?`a`b`c;(`s$`)~`s!0N
  • q.k - modified .z.ph to allow for the correct response being passed in the header when requests for files are made with multiple dots in the filename.

  • improved performance of wavg when null data present

    e.g. q)x:10000000?100f;y:10000000?1f;x[1]:0n;y[1]:0n;0N!system"ts r2:sum x*y";0N!system"ts r1:x wsum y";r1~r2

2013.05.03

Fixes and improvements

  • improved performance of some arithmetic with short type.

    e.g. sum shortVector

2013.05.02

(updated)

Fixes and improvements

  • improved performance of abs.

2013.04.13

Fixes and improvements

  • Unix on Intel targets currently require sse4.1 or above.

2013.04.12

New

  • peach can use multiprocess via tcp. Start up N slave processes listening on ports 20000 + til N, and then master process with -s -N.

    Scheduling is such that the mapping of input elements to slaves processes is not preallocated; the elements are distributed as each slave completes their previous element. Whatever data is required to execute each element must exist on each slave process.

Fixes and improvements

  • reworked SSE code. Unix on Intel targets currently require sse4.2 or above.

  • w32 only - alloc > 4GB caused crash instead of reporting wsful.

    e.g. q)1000000000#1
  • nested sync msgs could cause the socket to be closed erroneously, the remote throwing 'rcv: Resource temporarily unavailable.

    e.g. q)h:hopen 55557;neg[h]@/:("0N!.z.w \"0N!{0}[]\"";"0N!.z.w \"0N!{1}[]\"")
  • N.B. nested sync messaging is generally to be avoided; due to the nature of having to process incoming messages to reach a response,

    the order of response messages may be incorrect.

2013.04.03

New

  • added K sd0x(I d,I f) to the c-api, same functionality as sd0(I d) but f speficies whether to close d. sd0 closes d.

Fixes and improvements

  • explicitly reading from a piped or redirected stdin on windows was not receiving any data, since v1.0.

    e.g. c:\>cat while[1;if[0=0N!count 0N!read0 0;exit 0]] > test.q
         c:\>cat test.q | q test.q
  • selecting from a non-existent partition was throwing a length error since initial release of v3.1T.

    e.g. q)foo:([]goo:1 2 3);`:2013.04.02/foo/ set foo;select from foo where date=2013.04.03
  • q.k - sublist was limited to 2 billion elements.

    e.g. q)count 0 2500000000 sublist([]x:3000000000#0x0) / returned 2147483647
  • dict fill empty dict was crashing.

    e.g. q)(`a`b!1 2)^()!()

2013.03.14

Fixes and improvements

  • Improved performance of in as first op within a where clause.

    e.g. q)s:8000#sym;select count i from trade where date=last date,sym in s
  • Reinstate limit check when writing a table as a single file, where any vector inside the table exceeds 2 billion elements. Limit was erroneously lifted since v3.0 2012.10.15.

    e.g. q)`:t set ([]a:(`long$2 xexp 31)#0x0)
  • within inside select clause was not using comparison tolerance.

    e.g. q)v:1+(til 3)*1e-16;0N!3=count select from ([]v) where v within v 2 2;

2013.03.04

New

  • added -23!x to force mapped data into memory without copying.

    e.g. q)-23!t:select from get`:t/; / previous tricks to force load included .. where i>=0
  • added sanity checks to ensure read,fault,close for compressed files all happen on the thread that opened the file.

Fixes and improvements

  • peach was not running on main thread if only one element in arg; since v3.1T 2012.12.29

  • garbage collect could result in seg fault instead of printing wsfull.

    e.g. q)((1+)\)0 / iterate forever on 32bit kdb+
  • windows builds only - system"l path/file.q" did not try $QHOME/path/file.q if not found relative to cwd; since v3.0 2012.07.27.

2013.02.21

New

  • removed the limit of 4096 open compressed files; number of open files is now just the limit from the OS.

Fixes and improvements

  • an enum passed as table arg to exec must be a vector; was crashing, now throws 'type

    e.g. q)t:([]());exec from`t!0
  • 0N x was erroneously processing as 0 x, since 3.0 2011.11.28.

  • If a file was missing from a splayed table, certain accesses could crash.

    e.g. q)`:t/ set([]a:til 10;b:til 10);system"rm t/a";0#flip {x[`.d]!x}`:t
  • .Q.chk no longer maps all columns for a table simultaneously.

  • block amend within a view.

    e.g. q)foo::delete foo from`.;1
         q)foo / used to crash, no throws 'noamend
  • (div/)("gpidf";"gmnba";"fibij";"nlpno";"ckmlj";"dbmhk";"pllcj";"emhaf";"eebbk") was crashing since 3.0 2012.11.13

  • -19!x (create compressed file) would crash if 2nd arg was not a symbol.

    e.g. q)-19!(1;2;3.)

2013.01.24

Fixes and improvements

  • a logging process (-l as cmd line option) did not pass the correct number of log records to a replicating process if >2 billion; since v3.0 2011.11.22.

  • allow \r to be issued at the q console on master logging process without disturbing replicating process.

  • flush to log file when replication process connects to logging process (only relevant where rep process is on different OS instance to logging process).

  • Amending an element in a vector would drop the `g# attr if there were another reference to that vector

    e.g. q)y:x:`g#til 1000;x[0]:9;(1i;`g;1i;`g)~(-16!x;attr x;-16!y;attr y)
  • osx builds only - a SIGINT during peach could cause a crash.

  • a SIGINT during .Q.gc[] when using slave threads could cause a crash.

  • in was not matching for tables where there was >1 guid column.

    e.g. q)g:1?0Ng;([]g;g)in([]g;g)
  • replication for loopback commands using handle 0 broke in v3.0 since 2012.10.15; threw 'parse and stopped replicating.

  • deal was not returning distinct values.

    e.g. q)do[8;0N!100000=count distinct -100000?`8]

2013.01.08

New

  • hsym can now handle vectors of symbols.

    e.g. q)hsym`file1`file2
  • allow system settings to be passed ints as well as longs.

    e.g. q)\c 10 30i
  • when views threw an error, an empty list was returned from that point on. Now it evaluates each time.

    e.g. q)a::1+b
         q)a
         'b
         q)0N!a
         'b

2012.12.22

(updated)

Fixes and improvements

  • upsert with missing columns of nested types did not fill using those types (used () instead).

    e.g. q)t:([]a:2 3;b:("as";"qwe"));t,:([]a:3 4);([]a:2 3 3 4;b:("as";"qwe";"";""))~t

2012.12.21

New

  • faster interval selections (about 4 times faster from memory).

    e.g. q)q:hsym[`$string last date]`quote  / map latest quote table
         q)select from q where sym=`A,..     / select data for sym. 4 times faster
         q)select by from q where sym=`A,..  / select last row for sym. 10 to 100 times faster(constant time)
    faster I wavg E

NUC (Not Upwardly Compatible)

Not backward compatible. Changes existing behavior.

  • result type of E arithmetic for +-* changes from F to E.

    (avg and wavg still always go to F. mdev promotes to F.)