[ 
https://issues.apache.org/jira/browse/DERBY-3072?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12528810
 ] 

Kim Haase commented on DERBY-3072:
----------------------------------

This is great work, Rick -- you've structured the new topics very well, and 
they are clear and well written. The tuning topics are amazingly clear for such 
complex material. Here are some suggestions for improvement. Any topic with no 
comments is just fine.

Global nit: According to the rules about restrictive and nonrestrictive clauses 
as I learned them, "which" should be "that" in every location where it is used 
in these topics. (Briefly, if the sentence would be meaningless without the 
clause, use "that"; if the clause adds nonessential information, use "which" 
and set it off with commas.)


Tuning Guide comments:

I think you may need to change one more file, the parent file of the new 
performance tips file. The parent file is "The tips," ctunperf25864.dita. It 
contains a manually created list of subtopics, with additional verbiage, in 
addition to the autogenerated list at the bottom. So you'd need to add your new 
topic there.


ctunperftablefunctions.html:

I'm wondering about "to cost" as a verb, from the point of view of translation. 
Maybe "how to cost a ..." could be "how to calculate the cost of a ..." You 
could also make the index terms similar to the ones for 
cdevspecialtfopttune.dita.

I think we try to talk about topics rather than sections, but to avoid the 
whole issue you could just say 

See "Programming Derby-style table functions" in the Derby Developer's Guide.


Developer's Guide comments:

cdevspecialtabfuncs.html:

Paragraph 1: In the second sentence, "These" lacks a referent; when you are 
introducing a topic it helps to be crystal clear. (This rule doesn't matter 
much, since the meaning is clear regardless; it's just an FYI.) In the third 
sentence, "xml" should be "XML". So I'd suggest the following:

Derby lets you create table functions. Table functions are functions that 
package up external data to look like Derby tables. The external data can be an 
XML file, a table in a foreign database, a live data feed--in short, any 
information source that can be presented as a JDBC ResultSet.

Paragraph 2: It seems awkward to have a clause in between "the following data 
sources" and the list of the data sources. It might be clearer to swap them and 
use a sub-bullet list, like this:

For example, Derby-style table functions let you do the following:

  * Perform a bulk import of foreign data into local Derby tables
  * Join Derby tables with any of the following data sources:
    * XML-formatted reports and logs
    * Queries that have been run in foreign databases
    * Streaming data from sensors
    * RSS feeds

(I don't know that "bulk import" is a well-known verb -- in the Tools guide, it 
is a noun; list items that aren't sentences shouldn't end with periods; "XML" 
again; and "run" can be either a participle or a verb, so it should be 
disambiguated.)

Paragraph 3: The following might be clearer:

See "CREATE FUNCTION statement" in the Derby Reference Manual for the complete 
syntax needed to declare Derby-style table functions. The following topics 
provide information on how to write Java methods that wrap foreign data sources 
inside ResultSets.


cdevspecialtfbasic.html:

Paragraph 2: Do you think "may be stubbed out and simply raise exceptions" will 
be completely clear even to non-native speakers of English? I'm wondering if 
the following (or something similar) would be clearer:

Most of the ResultSet methods can be written as stubs that do nothing but throw 
exceptions.

4th bullet: It's not clear what the XXX in getXXX means until you look at the 
linked-to topic. Would it be helpful to say the following?

...Derby calls a getXXX() method on each referenced column, where XXX is the 
column's data type.

In the example, you might line up the table data types vertically if you can.

Elsewhere we say "FROM list" instead of "from-list"; also, the passive verbs in 
this sentence make it rather convoluted, so how about the following?

To invoke the table function, wrap it with [in??] a TABLE constructor in the 
FROM list of a query.


cdevspecialtfgetxxx.html:

I think "data type" is the more common form. Also, in text you'd want to put 
"getXXX()" in italics as you do in the parent topic. And in the second 
sentence, add "method":

While scanning a Derby-style table function, Derby calls a preferred getXXX() 
method for each column, based on the column's data type.

The following table lists the preferred getXXX() method for each Derby data 
type.


cdevspecialtfexample.html:

The first sentence is not very substantive. It might be more economical to have 
just one sentence saying something like

The following simple table function selects rows from a foreign database.


cdevspecialtfoptimizer.html:

Paragraph 1: I think we usually say "topic" rather than "section".

Bullet item 1: From the point of view of the translator or non-native speaker 
of English, "inclines" may be a somewhat unusual word. How about 

Therefore, the optimizer is likely to place ...

Bullet item 2: Participial and gerund phrases (such as "Knowing ...") are often 
ambiguous. How about 

If it knows that a table function is repeatable, the optimizer can place ...

I'm not sure about "siphoning" -- is "putting" incorrect or too boring?

Bullet item 1 (new bullet list): You might spell out "no-argument".

Bullet item 2: Are there javadocs for the VTICosting interface? I'm not sure 
they would be available in the commonest (bin) distribution of Derby, since 
that has only the JDBC javadocs as far as I know. If they are reachable 
somewhere, you might provide a pointer. I think you've done a great job 
providing all the information people need, though.

It might be helpful to add xref links in the second sentence as follows:

This involves implementing the following methods, as described in Measuring the 
cost of Derby-style table functions and Example VTICosting implementation:

Even though the generated HTML includes links to those subtopics at the end of 
this topic, it would still be reassuring to clarify that the needed info is 
available there.

In the three sub-bullets, you might want to change "This" to "This method".

First sub-bullet: I don't see any mention of STARTUP and SCAN in the two 
subtopics. What is the relationship between these terms and the values 
mentioned in "Measuring the cost of Derby-style table functions"? The value 
returned by getEstimatedCostPerInstantiation() doesn't look like a sum of two 
values to me, so I'm a bit confused.


cdevspecialtfopttune.html:

You might want to create some sections within this topic, because right now the 
transitions from one part to another are not entirely clear. For example, you 
might put the part beginning "We treat optimizer Imprecision as a constant ..." 
in a section called "Calculating the optimizer's Imprecision", and you might 
put the part beginning "The following formula explains how to compute the 
Actual runtime cost ..." in a section called "Calculating the Actual run time 
for the table function". Finally. you might put the part beginning "Putting all 
of this together ..." in a section called "Computing the value returned by 
getEstimatedCostPerInstantiation()".

"Short-circuit" bullet: Would it be helpful to give an example of how to do 
this? Would all of your audience know? Also, I think "next()" should be in 
italics. And "table function" is not capitalized elsewhere in this topic, so 
should it be capitalized here?

"Record" bullet" (two occurrences): Should VTIResultSet be in italics?

At the end, since you've broken down the A value, wouldn't it be consistent to 
break down the I value too? That would make the formula

C = O/T * [ ( P * N ) + E ]


cdevspecialtfoptexample.html:

Paragraph 1: Again, saying that something is easy is not very substantive (and 
may not have the reassuring effect that was probably intended). Maybe something 
like

Once you have measured your table function's cost, you can write the VTICosting 
methods.


Reference Manual comments:

rrefcreatefunctionstatement.html:

In the TableType section, again, you might want to cut "the section on" and 
just say 

For more information, see "Programming Derby-style table functions" in the 
Derby Developer's Guide.

In the third paragraph of the ParameterStyle section, I don't think 
DERBY_JDBC_RESULT_SET and JAVA need to be in italics here.


rrefsqljtfinvoke.html:

I assume you made a deliberate decision to place this new topic as a subtopic 
of "TableViewOrFunctionExpression" rather than to move it up to the "SQL 
identifiers" topic, where all the other xrefs in the syntax statement can be 
found (table-Name, view-Name, etc.). If the parent topic will always be the 
only topic that refers to this topic, that makes sense, I guess. However, I 
believe this is a deeper level of topic nesting than occurs anywhere else in 
this manual.

DITA note: I believe an example element can contain paragraphs, so you don't 
have to structure the topic example/section/example; it can be all one example 
with a paragraph in the middle. Unimportant, though; doesn't affect the look of 
the output.


> User documentation for Table Functions
> --------------------------------------
>
>                 Key: DERBY-3072
>                 URL: https://issues.apache.org/jira/browse/DERBY-3072
>             Project: Derby
>          Issue Type: New Feature
>          Components: Documentation
>            Reporter: Rick Hillegas
>            Assignee: Rick Hillegas
>         Attachments: derby-3072-01-basic-aa.diff, derby-3072-01-basic-aa.tar
>
>
> This issue tracks changes to the user guides to describe table functions. 
> This is the work needed for the  "Documentation" section of the functional 
> spec attached to DERBY-716.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to