diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/compiler/compiler-history/eiffelstudio-6-compiler-history/major-changes-between-ise-eiffel-62-and-ise-eiffel-63.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/compiler/compiler-history/eiffelstudio-6-compiler-history/major-changes-between-ise-eiffel-62-and-ise-eiffel-63.wiki
index 0e0bd109..aa3153a0 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/compiler/compiler-history/eiffelstudio-6-compiler-history/major-changes-between-ise-eiffel-62-and-ise-eiffel-63.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/compiler/compiler-history/eiffelstudio-6-compiler-history/major-changes-between-ise-eiffel-62-and-ise-eiffel-63.wiki
@@ -19,6 +19,7 @@
* Fixed missing detection of VREG and VRFT errors for labels of a named tuples which is used as an actual generic parameter of a type (fixes eweasel test#tuple012 and test#tuple013), thus some of your code might be broken since the compiler failed to check this before.
* Fixed eweasel test#valid222 where compiler properly detects VDRS-4 errors when you redefine a repeatedly inherited routine in at least one but not all branches, but fail to provide a local definition.
* Now a formal generic parameter only conforms to a formal generic parameter, that is to say assignment to a formal generic parameter where the source is of type NONE (i.e Void) will now be rejected by the compiler.
+* Dropped support for older Microsoft C/C++ compilers on Windows platforms. We only support VS 2005 or greater.
==Bug fixes==
diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-modification.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-modification.wiki
index b090712d..548772d1 100644
--- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-modification.wiki
+++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/data-modification.wiki
@@ -8,19 +8,23 @@ Use the [[ref:/libraries/store/reference/db_change_flatshort|DB_CHANGE]] class
[[ref:/libraries/store/reference/db_change_flatshort|DB_CHANGE]] allows you to modify the database data using the SQL language:
* Prepare your SQL query and use modify:
- modification: DB_CHANGE
- -- Modification tool.
- ...
- create modification.make
- modification.modify ("Update CONTACTS set Firstname = ' John'")
+ modification: DB_CHANGE
+ -- Modification tool.
+
+ ...
+
+ create modification.make
+ modification.modify ("Update CONTACTS set Firstname = ' John'")
* Commit your changes with your session control:
- session_control: DB_CONTROL
- -- Session control.
- ...
- session_control.commit
+ session_control: DB_CONTROL
+ -- Session control.
+
+ ...
+
+ session_control.commit
{{tip|It is always better to check the database status for errors before committing changes. }}
diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-selection.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-selection.wiki
index f2c2e99e..227c9000 100644
--- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-selection.wiki
+++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/database-selection.wiki
@@ -8,11 +8,14 @@ Use the [[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]]
[[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]] enables your application to get database content using SQL 'select' queries:
* You can carry out 'select' queries in an intuitive way using directly the SQL language:
- selection: DB_SELECTION
- ...
- create selection.make
- selection.set_query ("select * from CONTACTS where firstname = 'John'")
- selection.execute
+ selection: DB_SELECTION
+ -- Selection tool
+
+ ...
+
+ create selection.make
+ selection.set_query ("select * from CONTACTS where firstname = 'John'")
+ selection.execute
{{tip|Always check the database status for errors after your 'select' query. }}
diff --git a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/selection-access.wiki b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/selection-access.wiki
index 9bbf083b..d602bb30 100644
--- a/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/selection-access.wiki
+++ b/documentation/current/solutions/database-access/eiffelstore/eiffelstore-tutorial/eiffelstore-interface-layer/selection-access.wiki
@@ -15,31 +15,36 @@ To use DB_RESULT, process in 2 steps:
[[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]] class provides different ways to customize result loading:
* You want to access an '''unique''' row: [[ref:/libraries/store/reference/db_result_flatshort|DB_RESULT]] object is accessible via cursor:
- selection: DB_SELECTION
- my_result: DB_RESULT
- ...
- selection.query ("...")
- if selection.is_ok then
- selection.load_result
- my_result := selection.cursor
- end
+ selection: DB_SELECTION
+ my_result: DB_RESULT
+
+ ...
+
+ selection.query ("...")
+ if selection.is_ok then
+ selection.load_result
+ my_result := selection.cursor
+ end
* You want to load a '''complete list''' of rows: [[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]] can store [[ref:/libraries/store/reference/db_result_flatshort|DB_RESULT]] objects in a list. To do this, you have mainly to provide a LIST object to DB_SELECTION with set_container:
- selection: DB_SELECTION
- container: ARRAYED_LIST [DB_RESULT]
- create container.make (Max_results)
- ...
- selection.set_container (container)
- ...
- from
- container.start
- until
- container.after
- loop
- ...
- end
+ selection: DB_SELECTION
+ container: ARRAYED_LIST [DB_RESULT]
+
+ ...
+
+ create container.make (Max_results)
+ ...
+ selection.set_container (container)
+ ...
+ from
+ container.start
+ until
+ container.after
+ loop
+ ...
+ end
{{tip|Provide [[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]] with the LIST structure convenient for what you need to do with the results. }}
@@ -47,34 +52,40 @@ To use DB_RESULT, process in 2 steps:
* You want to '''select part''' of the result set: you can set an action in [[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]] that will be executed each time a row is loaded. This action can for instance manipulate current row and define a stop condition.
** You need to define a descendant of class ACTION and set it to [[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]] :
- class
- MY_ACTION
- inherit
- ACTION
- redefine
- execute, found
- end
+class
+ MY_ACTION
+inherit
+ ACTION
+ redefine
+ execute, found
+ end
+
...
- execute
- do
- i := i + 1
- end
- ...
- found: BOOLEAN
- do
- Result := i >= Max_result
- end
+
+ execute
+ do
+ i := i + 1
+ end
+
+ ...
+
+ found: BOOLEAN
+ do
+ Result := i >= Max_result
+ end
** Then set action to [[ref:/libraries/store/reference/db_selection_flatshort|DB_SELECTION]] :
- selection: DB_SELECTION
- action: MY_ACTION
- ...
- selection.set_action (action)
- selection.query ("...")
- if selection.is_ok then
- selection.load_result
- end
+ selection: DB_SELECTION
+ action: MY_ACTION
+
+ ...
+
+ selection.set_action (action)
+ selection.query ("...")
+ if selection.is_ok then
+ selection.load_result
+ end
@@ -83,14 +94,16 @@ To use DB_RESULT, process in 2 steps:
A DB_RESULT object merely carries data retrieved from the database. You have to convert it to a DB_TUPLE to access data within the retrieved row conveniently, i.e. mostly the column values:
- selection: DB_SELECTION
- tuple: DB_TUPLE
- ...
- create tuple
- tuple.copy (selection.cursor)
- if tuple.count >= 2 and then tuple.column_name (2).is_equal ("Firstname") then
- io.putstring (tuple.item (2).out)
- end
+ selection: DB_SELECTION
+ tuple: DB_TUPLE
+
+ ...
+
+ create tuple
+ tuple.copy (selection.cursor)
+ if tuple.count >= 2 and then tuple.column_name (2).is_equal ("Firstname") then
+ io.putstring (tuple.item (2).out)
+ end