Hi Mohit

Please see branch TODO



Sorry, I promised we would be done, but I found a couple things I've
pointed out in a previous review that are not yet implemented. And
also a couple new things. Please fix:


0) You haven't done anything with docs/index.rst You need to
 * change documentation since we have changed the structure of the
json query object.
      Ie. It is now { "query" : { "_id" : 1 } }

 * update the version number and changelog.

 * also, see next point which needs to be documented too.

As a general rule, make it a habit to change the documentation within
the same (or at least within the next) commit where you change some
behavior.

1)

  void SQLGenerator::generateDeleteSql()
  {
    if ( _json_in["_id"].asBool() )
    {
      _sql= "DELETE FROM `";
      _sql.append(_schema);
      _sql.append("`.`");
      _sql.append(_table);
      _sql.append("`");
      _sql.append(" WHERE _id = ");
      _sql.append(_json_in["_id"].asString());
      _sql.append(";");
    }
    else
    {
      _sql="COMMIT ;";
      _sql.append("DROP TABLE `");
      _sql.append(_schema);
      _sql.append("`.`");
      _sql.append(_table);
      _sql.append("`;");
    }

  }

The else branch cannot be default behavior, it is too dangerous. Now
that you know how to implement options, please add the option
  --json_server.allow_drop_table
  default = false/off

Change the else branch above to:
   if else ( json_server_allow_drop_table == true/on )

Remember to document the new option in docs/index.rst! (Also, remember
to document the options to set table and schema, which I'm not yet
reviewing.)


2)

      SQLExecutor::SQLExecutor(const string &user, const string &schema)

Please remove the user parameter. We can add it back once we actually
implement authentication.




3)

    /**
     * Stores an internal sql query.
     */
    string _internal_sql_query;

    /**
     * Stores a sql string.
     */
    string _sql;

These are the same. Please remove _internal_sql_query.

    _error_type= "sql error";
    _error_message= _exception.getErrorMessage();
    _error_code= _exception.getErrorCode();

These are error variables of json_out. They do not belong in
SQLExecutor. Here you should just store _exception, please remove
these lines. Then you can get this information from the exception in
SQLToJsonGenerator.




4) It seems to me you do not properly delete objects that were created
with new operator. In other words, this is now leaking memory!

Any object that is created with "new", must also be freed with
"delete". For example:

extern "C" void process_api02_json_req(struct evhttp_request *req, void* )
  HttpHandler* handler = new HttpHandler(json_out,json_in,req);
      DBAccess* dbAccess = new
DBAccess(json_in,json_out,req->type,schema,table);

  void DBAccess::execute()
      SQLGenerator* generator = new SQLGenerator(_json_in,_schema,_table);
      SQLExecutor* executor = new SQLExecutor("",_schema);
      SQLToJsonGenerator* jsonGenerator = new
SQLToJsonGenerator(_json_out,_schema,_table,executor);

Alternatively, all of the above cases can actually also be
instantiated as local variables, ie
  HttpHandler* handler(json_out,json_in,req);

...in which case a delete isn't needed, rather they are automatically
deleted when the function ends.

5)
  bool HttpHandler::validateJson(Json::Reader reader)

The reader object is only needed inside this function. There is no
need to pass it in from the outside. Please change this method so it
doesn't take any arguments.

      void sendResponse(Json::StyledWriter writer,Json::Value &json_out);

Same is true for the writer here: Just create it inside the function,
don't pass it as an argument.
json_out on the other hand is already a member variable of this
object, you don't need to pass it as an argument, just use _json_out!



6) json_server.cc

  table= handler->getTable();
  if(not table || strcmp(table,"")==0)
  {
    table= default_table.c_str();
  }

  if(table && !strcmp(table,"")==0)
    ....
  else
  {
    handler->generateHttpError();

This code belongs in HTTPHandler! I would change the name of
validateJson() to just validate() and put it there.






Ok, when you've done the above:

It seems you didn't yet merge against trunk, which is lp:drizzle. So now:

 - please merge my branch above
 - do the changes listed above
 - merge lp:drizzle
 - run make test
 - submit merge request against lp:drizzle


Then about comments. I've edited some of the comments and
documentation. You don't need to work on them any further. Just merge
my changes, do the changes I've listed above, then do a merge request.


I'd like to highlight these changes I've made:

  /**
   * a class
   * used to access various members and variables of sql_generator,
sql_executor, sql_to_json_generator.
   */
  class DBAccess
  {
    private:
      /**
       * a private variable.
       * stores input json object.
       */


Comments like "a class" or "a private variable" are unnecessary. The
reader is expected to know that much C++! (An exception is that
sometimes there is no need to comment on the constructors, in which
case people write just "Constructor".)


The other main thing to note is to start sentences with capital letters.

I made also several other changes which are mostly just a matter of
style, please check out the diff just as a learning excercise.


henrik


On Thu, Jun 21, 2012 at 2:07 PM, Mohit Srivastava
<srivastavamohi...@gmail.com> wrote:
> Default Schema and table set:
>
> http://bazaar.launchpad.net/~srivastavamohit91/drizzle/drizzle-alsosql/revision/2568
>
>
> On Tue, Jun 19, 2012 at 9:04 PM, Mohit Srivastava
> <srivastavamohi...@gmail.com> wrote:
>>
>> Hi,
>> Check this out :)
>>
>>
>> http://bazaar.launchpad.net/~srivastavamohit91/drizzle/drizzle-json_server/revision/2472
>>
>> --
>> Mohyt
>>
>>
>> On Mon, Jun 18, 2012 at 1:28 PM, Mohit Srivastava
>> <srivastavamohi...@gmail.com> wrote:
>>>
>>> Hi,
>>> I get all the point and commit the changes.
>>>
>>>
>>> http://bazaar.launchpad.net/~srivastavamohit91/drizzle/drizzle-json_server/revision/2471
>>>
>>> --
>>> mohit
>>>
>>> On Mon, Jun 18, 2012 at 12:39 PM, Henrik Ingo <henrik.i...@avoinelama.fi>
>>> wrote:
>>>>
>>>> On Mon, Jun 18, 2012 at 9:21 AM, Mohit Srivastava
>>>> <srivastavamohi...@gmail.com> wrote:
>>>> > To GET all details from table:
>>>> > Now json can be used in two ways:
>>>> > { "query" : {} , "authentication" : { "username" : "hingo", "password"
>>>> > :
>>>> > "qwerty" } }
>>>> > or
>>>> > {"authentication" : { "username" : "hingo", "password" : "qwerty" } }
>>>> >
>>>> > which one we have to prefer.
>>>>
>>>> Both. Just like before, it's just that the query part is now embedded
>>>> into a larger json document.
>>>>
>>>> > Also where we have to use authentication , in sql_executor while
>>>> > creating
>>>> > session ?
>>>>
>>>> Yes. But this is just an example, I don't want to implement
>>>> authentication yet. the point is just to change the structure of the
>>>> query json so that it is extensible in the future, such as for use by
>>>> authentication.
>>>>
>>>> > Also ,
>>>> > This particular piece of code is also not needed now.
>>>> > It gives "_id" in request as higher priority
>>>> >  if ( !_json_in["_id"].asBool() )
>>>> >     {
>>>> >       if( _id )
>>>> >       {
>>>> >         _json_in["_id"] = (Json::Value::UInt) atol(_id);
>>>> >       }
>>>> >     }
>>>>
>>>> If you remove that code, will this test still pass?
>>>>
>>>> henrik
>>>>
>>>>
>>>>
>>>> --
>>>> henrik.i...@avoinelama.fi
>>>> +358-40-8211286 skype: henrik.ingo irc: hingo
>>>> www.openlife.cc
>>>>
>>>> My LinkedIn profile: http://www.linkedin.com/profile/view?id=9522559
>>>
>>>
>>
>



-- 
henrik.i...@avoinelama.fi
+358-40-8211286 skype: henrik.ingo irc: hingo
www.openlife.cc

My LinkedIn profile: http://www.linkedin.com/profile/view?id=9522559

_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : drizzle-discuss@lists.launchpad.net
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to