Commit graph

89544 commits

Author SHA1 Message Date
Olivier Bertrand
cfa872f6c8 - Commit resolved conflicted files
modified:
  storage/connect/engmsg.h
  storage/connect/filamtxt.cpp
2014-11-16 20:14:36 +01:00
Olivier Bertrand
b9165cb58d - Remove gcc warning (no previous declaration of msglang)
modified:
  storage/connect/ha_connect.cc

- Define strcasecmp for Linux
modified:
  storage/connect/rcmsg.c

- Avoid potential buffer overflow
modified:
  storage/connect/plgdbutl.cpp
  
- Change %d in %lld in VALUE_TOO_BIG message
modified:
  storage/connect/encas.h
  storage/connect/english.msg
  storage/connect/frcas.h
  storage/connect/french.msg
  storage/connect/frmsg.h
2014-11-16 01:16:51 +01:00
Olivier Bertrand
5d8311960a - Implement the NEWMSG and XMSG methods
They are still experimental and should not be used in production.
added:
  storage/connect/encas.h
  storage/connect/english.msg
  storage/connect/enids.h
  storage/connect/frcas.h
  storage/connect/french.msg
  storage/connect/frids.h
  storage/connect/frmsg.h
modified:
  storage/connect/connect.cc
  storage/connect/engmsg.h
  storage/connect/filamdbf.cpp
  storage/connect/global.h
  storage/connect/ha_connect.cc
  storage/connect/msgid.h
  storage/connect/plgdbutl.cpp
  storage/connect/plugutil.c
  storage/connect/rcmsg.c
  storage/connect/resource.h
  storage/connect/tabfmt.h

- Fix global variable not being properly initialized (MDEV-6690, MDEV-7094)
modified:
  storage/connect/ha_connect.cc
  storage/connect/plugutil.c
  storage/connect/user_connect.cc
  storage/connect/xindex.cpp

- Implement Rewind for ODBC tables (MDEV-7097)
modified:
  storage/connect/odbconn.cpp
  storage/connect/odbconn.h
  storage/connect/tabmysql.cpp
  storage/connect/tabodbc.cpp

- Reset N when reopening MYSQL tables
modified:
  storage/connect/tabmysql.cpp
2014-11-15 18:28:24 +01:00
Olivier Bertrand
9ade2d088d - FIX ftell error when the line endings do not match the declared or
default ending. Also takes care of files having mixed line endings.
  This is done by never using text mode for streams and handle the line
  endings in reading and writing. (MDEV-7030)
modified:
  storage/connect/filamtxt.cpp
2014-11-09 14:18:44 +01:00
Olivier Bertrand
f3e7e50d9a - Compile protect against not fully implemented optione XMSG and NEWMSG
modified:
  storage/connect/global.h

- Commit typo error
modified:
  storage/connect/tabmul.cpp*
2014-11-08 16:44:52 +01:00
Olivier Bertrand
2c6839ff97 - fix typo error
modified:
  storage/connect/tabmul.cpp
2014-11-08 16:29:16 +01:00
Olivier Bertrand
bd4814328c - Calculate next position in filamap without assuming ENDING option is true.
modified:
  storage/connect/filamap.cpp

- ftell error: indicate in the error msg that is can be due to wrong ENDING value.
  filamtxt.cpp (MDEV-7030)
modified:
  storage/connect/filamtxt.cpp

- Change STRING according to Alexander Barkov remarks.
  Suppress the wrong Strz function. The unconditional function strz is no more
  used for s->db and s->table_name because they are zero terminated.
modified:
  storage/connect/ha_connect.cc
  storage/connect/xobject.cpp

- Change version number
modified:
  storage/connect/filamap.cpp

- Change PATH_MAX to FN_REFLEN (MDEV-7036)
modified:
  storage/connect/os.h
  storage/connect/tabmul.cpp

- Fix bug by adding a void argument for OP_NOT in Makefilter.
modified:
  storage/connect/filter.cpp

- Begin implementing XMSG style
  Two new system variables are defined:
  msg_lang ENUM session
  errmsg_dir_path STR global readonly
  This is a work in progress.
modified:
  storage/connect/ha_connect.cc
  storage/connect/plgdbutl.cpp
  storage/connect/plugutil.c
  storage/connect/rcmsg.c
  storage/connect/resource.h
2014-11-08 13:35:03 +01:00
Olivier Bertrand
1f9259dfea - Fix MDEV-6988 and MDEV-6994
modified:
  storage/connect/ha_connect.cc
2014-11-01 17:08:39 +01:00
Olivier Bertrand
ea5d7a5cce - Add the new files to the source list
modified:
  storage/connect/CMakeLists.txt

- Check VIR columns when creating the table
modified:
  storage/connect/ha_connect.cc
  
- Add VirColumns declaration to avoid gcc warning
modified:
  storage/connect/tabvir.h
2014-10-31 13:58:43 +01:00
Olivier Bertrand
160708e14c - Adding the VIR table type implementation files
added:
  storage/connect/tabvir.cpp
  storage/connect/tabvir.h
2014-10-31 12:43:55 +01:00
Olivier Bertrand
4a17149ba3 - Add new table type VIR and virtual index
modified:
  storage/connect/connect.cc
  storage/connect/ha_connect.cc
  storage/connect/ha_connect.h
  storage/connect/mycat.cc
  storage/connect/plgdbsem.h

- Get good message when calling ColDB
modified:
  storage/connect/connect.cc

- Fix buffer preparation for BIN files
modified:
  storage/connect/filamfix.cpp

fix error while updating (force fseek)
modified:
  storage/connect/filamfix.cpp

fix error of XCOL column when filtered (typo)
modified:
  storage/connect/tabdos.cpp
  storage/connect/tabxcl.cpp

fix error when indexing on special column
modified:
  storage/connect/tabdos.cpp
2014-10-31 12:28:07 +01:00
Olivier Bertrand
652b964827 - Fix a bug in XCOL tables. When a row was filtered internally the XColumn
was not reset causing rows to be lost.
modified:
  storage/connect/connect.cc
  storage/connect/ha_connect.cc
  storage/connect/tabxcl.cpp

- Typo
modified:
  storage/connect/connect.cc
  storage/connect/ha_connect.cc
2014-10-24 19:22:05 +02:00
Olivier Bertrand
c4cf40c21b - Fix bug: Server crash when using a special column in XCOL tables
modified:
  storage/connect/mysql-test/connect/r/xcol.result
  storage/connect/mysql-test/connect/t/xcol.test
  storage/connect/tabxcl.cpp
2014-10-24 16:21:39 +02:00
Olivier Bertrand
4f59b65fb0 - Remove some gcc warnings
modified:
  storage/connect/filamvct.cpp
  storage/connect/ha_connect.cc
2014-10-22 13:51:33 +02:00
Olivier Bertrand
554746afe3 - Fix (gcc error) passing cmd instead of cmd.Getstr() to htrc
modified:
  storage/connect/myconn.cpp

- Remove an unuseful test (gcc warning)
modified:
  storage/connect/myconn.cpp
2014-10-22 12:02:46 +02:00
Olivier Bertrand
56e2771321 1) Handling string memory allocation with a new STRING class. This is only
the beginning. Defining the STRING class and begining to use it (MYSQL)

2) Change the xtrace, use_tempfile and exact_info connect variables from
   GLOBAL to SESSION. Remaining GLOBAL variables have been made readonly.

3) Take care of LEX_STRING variables. The .str should not be regarded as
   allways being 0 terminated. This is handled by the Strz functions that
   make sure to return 0 terminated strings.

Bug fix:
- When inserting in MYSQL table with special column(s) a query such as:
insert into t2 values(0,4,'new04'),(0,5,'new05');
failed saying: column id (the special column) not found in t2.
It is now accepted but must be counted in values (these 0 are ignored)
- ROWID was returning row numbers based 0. Now it is from base 1.

modified:
  storage/connect/array.cpp
  storage/connect/blkfil.cpp
  storage/connect/colblk.cpp
  storage/connect/connect.cc
  storage/connect/filamap.cpp
  storage/connect/filamdbf.cpp
  storage/connect/filamfix.cpp
  storage/connect/filamtxt.cpp
  storage/connect/filamvct.cpp
  storage/connect/filamzip.cpp
  storage/connect/filamzip.h
  storage/connect/filter.cpp
  storage/connect/global.h
  storage/connect/ha_connect.cc
  storage/connect/ha_connect.h
  storage/connect/libdoc.cpp
  storage/connect/mycat.cc
  storage/connect/myconn.cpp
  storage/connect/odbconn.cpp
  storage/connect/plgdbutl.cpp
  storage/connect/plugutil.c
  storage/connect/reldef.cpp
  storage/connect/tabcol.cpp
  storage/connect/tabdos.cpp
  storage/connect/tabfix.cpp
  storage/connect/tabfmt.cpp
  storage/connect/table.cpp
  storage/connect/tabmul.cpp
  storage/connect/tabmysql.cpp
  storage/connect/tabmysql.h
  storage/connect/taboccur.cpp
  storage/connect/tabodbc.cpp
  storage/connect/tabpivot.cpp
  storage/connect/tabsys.cpp
  storage/connect/tabtbl.cpp
  storage/connect/tabutil.cpp
  storage/connect/tabvct.cpp
  storage/connect/tabwmi.cpp
  storage/connect/tabwmi.h
  storage/connect/tabxcl.cpp
  storage/connect/tabxml.cpp
  storage/connect/user_connect.cc
  storage/connect/valblk.cpp
  storage/connect/value.cpp
  storage/connect/value.h
  storage/connect/xindex.cpp
  storage/connect/xobject.cpp
  storage/connect/xobject.h
  storage/connect/xtable.h
2014-10-21 17:29:51 +02:00
Olivier Bertrand
c65a9fb4c6 - Commit merged change
removed:
  extra/yassl/certs/dsa512.der
  extra/yassl/certs/dsa512.pem
added:
  extra/yassl/certs/dsa1024.der
  extra/yassl/certs/dsa1024.pem
  mysql-test/r/ctype_cp932.result
  mysql-test/r/log_errchk.result
  mysql-test/r/show_bad_definer-5553.result
  mysql-test/suite/heap/btree_varchar_null.result
  mysql-test/suite/heap/btree_varchar_null.test
  mysql-test/suite/innodb/r/foreign-keys.result
  mysql-test/suite/innodb/t/foreign-keys.test
  mysql-test/t/ctype_cp932.test
  mysql-test/t/log_errchk.test
  mysql-test/t/show_bad_definer-5553.test
  storage/tokudb/mysql-test/rpl/disabled.def
  storage/tokudb/mysql-test/tokudb_mariadb/r/mdev6519.result
  storage/tokudb/mysql-test/tokudb_mariadb/t/mdev6519.test
modified:
  client/mysql.cc
  cmake/install_layout.cmake
  config.h.cmake
  debian/dist/Debian/control
  debian/dist/Ubuntu/control
  extra/yassl/README
  extra/yassl/certs/ca-cert.pem
  extra/yassl/certs/client-cert.der
  extra/yassl/certs/client-cert.pem
  extra/yassl/certs/client-key.der
  extra/yassl/certs/client-keyEnc.pem
  extra/yassl/certs/server-cert.pem
  extra/yassl/certs/server-keyEnc.pem
  extra/yassl/include/buffer.hpp
  extra/yassl/include/openssl/ssl.h
  extra/yassl/src/buffer.cpp
  extra/yassl/src/handshake.cpp
  extra/yassl/src/yassl_imp.cpp
  extra/yassl/src/yassl_int.cpp
  extra/yassl/taocrypt/include/asn.hpp
  extra/yassl/taocrypt/include/block.hpp
  extra/yassl/taocrypt/include/integer.hpp
  extra/yassl/taocrypt/include/pwdbased.hpp
  extra/yassl/taocrypt/include/runtime.hpp
  extra/yassl/taocrypt/include/sha.hpp
  extra/yassl/taocrypt/src/aes.cpp
  extra/yassl/taocrypt/src/algebra.cpp
  extra/yassl/taocrypt/src/arc4.cpp
  extra/yassl/taocrypt/src/asn.cpp
  extra/yassl/taocrypt/src/blowfish.cpp
  extra/yassl/taocrypt/src/des.cpp
  extra/yassl/taocrypt/src/integer.cpp
  extra/yassl/taocrypt/src/md5.cpp
  extra/yassl/taocrypt/src/misc.cpp
  extra/yassl/taocrypt/src/rabbit.cpp
  extra/yassl/taocrypt/src/random.cpp
  extra/yassl/taocrypt/src/ripemd.cpp
  extra/yassl/taocrypt/src/sha.cpp
  extra/yassl/taocrypt/src/twofish.cpp
  mysql-test/lib/My/Platform.pm
  mysql-test/r/selectivity_innodb.result
  mysql-test/r/type_newdecimal.result
  mysql-test/r/type_time.result
  mysql-test/t/selectivity_innodb.test
  mysql-test/t/type_newdecimal.test
  mysql-test/t/type_time.test
  packaging/rpm-oel/mysql.spec.in
  plugin/auth_socket/auth_socket.c
  plugin/handler_socket/handlersocket/database.cpp
  plugin/handler_socket/handlersocket/handlersocket.cpp
  plugin/handler_socket/handlersocket/hstcpsvr.cpp
  plugin/handler_socket/libhsclient/hstcpcli.cpp
  plugin/handler_socket/libhsclient/socket.cpp
  plugin/handler_socket/perl-Net-HandlerSocket/HandlerSocket.xs
  plugin/metadata_lock_info/metadata_lock_info.cc
  plugin/server_audit/server_audit.c
  scripts/comp_sql.c
  scripts/mysql_system_tables_fix.sql
  sql-common/client.c
  sql/event_scheduler.cc
  sql/item.cc
  sql/log.cc
  sql/mysqld.cc
  sql/mysqld.h
  sql/opt_range.cc
  sql/sql_acl.cc
  sql/sql_cache.cc
  sql/sql_priv.h
  sql/sql_select.cc
  sql/sql_show.cc
  sql/sql_statistics.cc
  sql/sys_vars.cc
  storage/cassandra/ha_cassandra.cc
  storage/connect/inihandl.c
  storage/connect/libdoc.cpp
  storage/connect/mycat.cc
  storage/connect/tabxml.cpp
  storage/example/ha_example.cc
  storage/federatedx/ha_federatedx.cc
  storage/heap/hp_hash.c
  storage/innobase/api/api0misc.cc
  storage/mroonga/mrn_table.cpp
  storage/oqgraph/ha_oqgraph.cc
  storage/sequence/sequence.cc
  storage/sphinx/snippets_udf.cc
  storage/tokudb/CMakeLists.txt
  storage/tokudb/ft-index/ft/bndata.cc
  storage/tokudb/ft-index/ft/cachetable/cachetable.cc
  storage/tokudb/ft-index/ft/cachetable/checkpoint.cc
  storage/tokudb/ft-index/ft/cursor.cc
  storage/tokudb/ft-index/ft/ft-cachetable-wrappers.cc
  storage/tokudb/ft-index/ft/ft-flusher.cc
  storage/tokudb/ft-index/ft/ft-hot-flusher.cc
  storage/tokudb/ft-index/ft/ft-ops.cc
  storage/tokudb/ft-index/ft/ft-test-helpers.cc
  storage/tokudb/ft-index/ft/ft-verify.cc
  storage/tokudb/ft-index/ft/ft.cc
  storage/tokudb/ft-index/ft/le-cursor.cc
  storage/tokudb/ft-index/ft/loader/dbufio.cc
  storage/tokudb/ft-index/ft/loader/loader.cc
  storage/tokudb/ft-index/ft/loader/pqueue.cc
  storage/tokudb/ft-index/ft/logger/log_upgrade.cc
  storage/tokudb/ft-index/ft/logger/logcursor.cc
  storage/tokudb/ft-index/ft/logger/logfilemgr.cc
  storage/tokudb/ft-index/ft/logger/logformat.cc
  storage/tokudb/ft-index/ft/logger/logger.cc
  storage/tokudb/ft-index/ft/logger/recover.cc
  storage/tokudb/ft-index/ft/node.cc
  storage/tokudb/ft-index/ft/pivotkeys.cc
  storage/tokudb/ft-index/ft/serialize/block_table.cc
  storage/tokudb/ft-index/ft/serialize/compress.cc
  storage/tokudb/ft-index/ft/serialize/ft-node-deserialize.cc
  storage/tokudb/ft-index/ft/serialize/ft-serialize.cc
  storage/tokudb/ft-index/ft/serialize/ft_node-serialize.cc
  storage/tokudb/ft-index/ft/serialize/sub_block.cc
  storage/tokudb/ft-index/ft/txn/roll.cc
  storage/tokudb/ft-index/ft/txn/rollback-apply.cc
  storage/tokudb/ft-index/ft/txn/rollback-ct-callbacks.cc
  storage/tokudb/ft-index/ft/txn/rollback.cc
  storage/tokudb/ft-index/ft/txn/rollback_log_node_cache.cc
  storage/tokudb/ft-index/ft/txn/txn.cc
  storage/tokudb/ft-index/ft/txn/txn_child_manager.cc
  storage/tokudb/ft-index/ft/txn/txn_manager.cc
  storage/tokudb/ft-index/ft/ule.cc
  storage/tokudb/ft-index/src/errors.cc
  storage/tokudb/ft-index/src/indexer-undo-do.cc
  storage/tokudb/ft-index/src/indexer.cc
  storage/tokudb/ft-index/src/loader.cc
  storage/tokudb/ft-index/src/ydb.cc
  storage/tokudb/ft-index/src/ydb_cursor.cc
  storage/tokudb/ft-index/src/ydb_db.cc
  storage/tokudb/ft-index/src/ydb_env_func.cc
  storage/tokudb/ft-index/src/ydb_row_lock.cc
  storage/tokudb/ft-index/src/ydb_txn.cc
  storage/tokudb/ft-index/src/ydb_write.cc
  storage/tokudb/ft-index/tools/ftverify.cc
  storage/tokudb/ft-index/tools/tdb_logprint.cc
  storage/tokudb/ft-index/tools/tokuftdump.cc
  storage/tokudb/ha_tokudb.cc
  storage/tokudb/mysql-test/tokudb/disabled.def
  storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_lock_waits_released.test
  storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_locks_released.test
  storage/xtradb/api/api0misc.cc
  storage/xtradb/buf/buf0buf.cc
  strings/ctype-mb.c
  strings/decimal.c
  support-files/mysql.spec.sh
  tests/async_queries.c
  unittest/sql/my_apc-t.cc
2014-10-14 17:52:20 +02:00
Olivier Bertrand
0a913e20d2 - Add Sergei fix to enable loading OEM table libs
modified:
  storage/connect/ha_connect.cc
  storage/connect/reldef.cpp
2014-10-14 16:42:22 +02:00
Alexander Barkov
ec3e6cc88b Merge 10.0-connect -> 10.0 2014-10-13 12:31:55 +04:00
Olivier Bertrand
b10fa87b15 - Remove one gcc warning
modified:
  storage/connect/tabodbc.cpp
2014-10-12 15:46:31 +02:00
Olivier Bertrand
50fc9b3b19 - Fix null handling for date columns (see MDEV-6744)
modified:
  storage/connect/ha_connect.cc
  storage/connect/plgdbutl.cpp
  storage/connect/value.cpp
  storage/connect/value.h
2014-10-12 12:05:05 +02:00
Sergei Golubchik
911ed9379f merge 2014-10-11 12:52:55 +02:00
Sergei Golubchik
a7a60f6f33 compilation failure: ha_cassandra 2014-10-11 09:09:18 +02:00
Sergey Petrunya
1b960d9fd6 MDEV-6519: Assertion `join->best_read < double(...)' failed after adding a key to a TokuDB table...
- calculate_cond_selectivity_for_table() should handle the case
  where index statistics is not available (zeros are returned 
  in rec_per_key)
2014-10-10 23:52:47 +04:00
Sergei Golubchik
ba85a008e4 merge 2014-10-10 20:59:06 +02:00
Olivier Bertrand
7531f22a68 - Fix a regression error from regarding Header as Boolean from some table types.
Was added to ha_connect::GetBooleanOption (otherwise ignored)
modified:
  storage/connect/ha_connect.cc
2014-10-10 13:27:52 +02:00
Alexander Barkov
33f1ac66ad Merge 10.0-connect -> 10.0 2014-10-10 13:18:03 +04:00
Alexander Barkov
e2b895ec7b Merge 10.0-mroonga -> 10.0 2014-10-10 13:16:41 +04:00
Olivier Bertrand
5821b8eb02 - in CheckCond change strcat to strncat to avoid the case of non zero
terminated string.
modified:
  storage/connect/ha_connect.cc

- The Accept and Header Boolean variables were wrongly retrieved using
  GetIntInfo instead of GetBoolInfo causing some setting to ignored.
modified:
  storage/connect/tabdos.cpp
  storage/connect/tabdos.h
  storage/connect/tabfmt.cpp

- Fix date truncated because their Value class was not using their field length.
modified:
  storage/connect/ha_connect.cc
2014-10-09 17:23:37 +02:00
Sergei Golubchik
1b75bed00f 5.5.40+ merge 2014-10-09 10:30:11 +02:00
Sergey Vojtovich
1efee0379e Fixed mroonga build failure on Power8: define generic gcc version of
GRN_SET_64BIT.
2014-10-09 12:25:45 +04:00
Sergei Golubchik
b2d71434ed compilation fix for perl-Net-HandlerSocket 2014-10-08 15:21:48 +02:00
Sergey Vojtovich
6f762cdd6c Backport from 10.0:
revno: 4301
committer: Alexey Botchkov <holyfoot@askmonty.org>
branch nick: 10exp
timestamp: Tue 2014-07-22 15:28:15 +0500
message:
  gis-precise.test fixed to work on Power8.
------------------------------------------------------------
revno: 4295
committer: Alexey Botchkov <holyfoot@askmonty.org>
branch nick: 10exp
timestamp: Mon 2014-07-21 13:07:48 +0500
message:
  gis-precise test fixed to pass on Power8.
2014-10-08 18:10:31 +04:00
Sergei Golubchik
dbda20caff remove mariadb.pc file again, it cannot be added in a GA version 2014-10-08 09:35:00 +02:00
Sergei Golubchik
9329467e79 don't run privilege checking tests in embedded 2014-10-08 09:24:41 +02:00
Sergei Golubchik
104771de9a decimal: *correct* implementation of ROUND_UP at last 2014-10-08 00:46:10 +02:00
Sergei Golubchik
c1a4f0c5ab include mariadb.pc in debian builds 2014-10-08 00:45:56 +02:00
Sergei Golubchik
d3677c872f jemalloc compatibility 2014-10-08 00:45:41 +02:00
Sergei Golubchik
7e6d4bba0c XtraDB 5.5.40-36.1 2014-10-08 00:44:37 +02:00
Sergei Golubchik
ef7d950e04 percona-server-5.5.40-36.1 2014-10-07 21:41:48 +02:00
unknown
63ca157c92 MDEV-6781: bug with query cache when using views
The data base lenth passed to invalidator fixed
2014-10-07 19:38:45 +02:00
Sergei Golubchik
e73e1e7c7a packaging issues:
* skip debian 44_scripts__mysql_config__libs.dpatch it does not apply anymore
  (and anyway it would not work for a static library)
* fix the path for install(mariadb.pc)
2014-10-07 16:21:53 +02:00
Sergei Golubchik
fc58ba6c76 MDEV-5553 A view or procedure with a non existing definer can block "SHOW TABLE STATUS" with an unclear error message
Don't double-check privileges for a column in the GROUP BY that refers to
the same column in SELECT clause. Privileges were already checked for SELECT clause.
2014-10-07 11:55:39 +02:00
Sergei Golubchik
e5bc21af37 MDEV-4813 Replication fails on updating a MEMORY table with an index using btree
skip NULL VARCHAR key parts like it's done elsewhere
2014-10-07 10:54:14 +02:00
Sergei Golubchik
d2e808025a fixes for decimal type 2014-10-07 10:53:43 +02:00
Sergei Golubchik
7989c62bc0 post-merge fixes 2014-10-07 10:53:06 +02:00
Sergei Golubchik
0d2cba5df2 XtraDB 5.5.39-36.0 2014-10-06 20:06:39 +02:00
Sergei Golubchik
014214d034 percona-server-5.5.39-36.0 2014-10-06 19:56:00 +02:00
Sergei Golubchik
1ddfce4840 mysql-5.5.40 2014-10-06 19:53:55 +02:00
Sergey Petrunya
fd4c9af398 MDEV-6442: Assertion `join->best_read < double(...)' failed with optimizer_use_condition_selectivity >=3
- Fix the crash by making get_column_range_cardinality() 
  to handle the special case where Column_stats objects 
  is an all-zeros object (the question of what is the point
  of having Field::read_stats point to such object remains a 
  mystery)

- Added a few comments. Learning the code still.
2014-10-06 15:29:22 +04:00