Smalltalk generated code don't load on Squeak3.10.2-7179-basic and 
PharoCore-1.0-10491rc1 images
------------------------------------------------------------------------------------------------

                 Key: THRIFT-643
                 URL: https://issues.apache.org/jira/browse/THRIFT-643
             Project: Thrift
          Issue Type: Bug
    Affects Versions: 0.2
         Environment: Debian GNU/Linux Squeeze
Smalltalk versions:
- Squeak3.10.2-7179-basic 
- PharoCore-1.0-10491rc1

thrift svn revision: 887812
            Reporter: Miguel Enrique Cobá Martínez
            Priority: Critical
             Fix For: 0.2


I have found a bug in the generated code for the Smalltalk thrift interface.

I used thrift svn revision:

mig...@laptop:~/thrift-svn$ svn info
Ruta: .
URL: http://svn.apache.org/repos/asf/incubator/thrift/trunk
Raíz del repositorio: http://svn.apache.org/repos/asf
UUID del repositorio: 13f79535-47bb-0310-9956-ffa450edef68
Revisión: 888521
Tipo de nodo: directorio
Agendado: normal
Autor del último cambio: todd
Revisión del último cambio: 887812
Fecha de último cambio: 2009-12-06 18:42:38 -0600 (dom 06 de dic de
2009)

I did:

bootstrap.sh
configure
make

and then I tried to load the thrift smalltalk code from

lib/st/thrift.st 

in a squeak Squeak3.10.2-7179-basic.zip, pristine image from squeak.org.
That halted with an error about a duplicated readString method
declaration. The error is fixed in the attached patch.

Next I compiled the code for the cassandra thrift:

https://svn.apache.org/repos/asf/incubator/cassandra/trunk/interface/cassandra.thrift

with the command:

./compiler/cpp/thrift --gen st cassandra.thrift 

and tried to file in the generated code 

gen-st/cassandra.st

in said image.

Again the load halted. This time because of the underscores in the
generated code for the cassandra thrift definition. Squeak (and derived
smalltalks as Pharo) doesn't allow underscores in variable names (the
underscore is a legacy character used for variable assigment). Anyway I
have modified the code for smalltalk generator:

compiler/cpp/src/generate/t_st_generator.cc 

so that when a variable name in the thrift definition has a "_"
character, this is removed and the next character is converted to
uppercase. e.g. a variable like column_name will be generated in
smalltalk code as columnName. This way the code loads (and works
correctly) on Squeak.

The generated code has been tested in the following smalltalk images

Squeak3.10.2-7179-basic.image
PharoCore-1.0-10491rc1.image

and in both of them the new generated code for cassandra works
correctly.

I haven't tested the code generation with a thrift spec other than
cassandra, so maybe this will introduce some bugs. For my case it worked
great.
If anyone is using cassandra and want to test it, I installed the
default cassandra server on localhost port 9160 and tested from Squeak
and from Pharo by loading

lib/st/thrift.st
gen-st/cassandra.st

Then in a Squeak or Pharo workspace:

"Insert 10000 values"
[| cp result client |

client := CassandraClient binaryOnHost: 'localhost' port: 9160.

cp := ColumnPath new
  columnFamily: 'Standard1';
  column: 'col1'.

1 to: 10000 do: [ :i |
result := client insertKeyspace: 'Keyspace1'
  key: 'row', i asString
  columnPath: cp
  value: 'v', i asString
  timestamp: 1
  consistencyLevel: ((Cassandra enums at: 'ConsistencyLevel') at:
'QUORUM').]] timeToRun

And read the values just inserted:

"Read 10000 values"
[| cp result client |

client := CassandraClient binaryOnHost: 'localhost' port: 9160.
cp := ColumnPath new
  columnFamily: 'Standard1';
  column: 'col1'.

1 to: 10000 do: [ :i |
result := client getKeyspace: 'Keyspace1'
  key: 'row', i asString
  columnPath: cp
  consistencyLevel: ((Cassandra enums at: 'ConsistencyLevel') at:
'QUORUM').]] timeToRun


Regarding the patch, I am not a C++ expert and the drop_underscores()
function surely can be improved by someone with more experience with C++
idioms. Essentially what it does is to convert:

from -> to
-----   -----
a_variable -> aVariable
a_new_var -> aNewVar
column_path -> columnPath
variable -> variable

Give it a try and if deemed good enough please add it to the thrift
code.
Those changes are published under the apache public license, the same as
the thrift codebase.

The patch is generated with

svn diff -x -u > patch.888520

against revision 888520 of the thrift svn code.

-- 
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