Massimo, thanks for looking into this.
These are the contents of file the ....auth_user.table file:

(dp1
S'first_name'
p2
S'VARCHAR(128)'
p3
sS'last_name'
p4
S'VARCHAR(128)'
p5
sS'is_department_manager'
p6
S'BIT'
p7
sS'email'
p8
S'VARCHAR(128) UNIQUE'
p9
sS'reset_password_key'
p10
S'VARCHAR(512)'
p11
sS'department'
p12
S'INT, CONSTRAINT auth_user_department__constraint FOREIGN KEY (department)
REFERENCES department(id) ON DELETE CASCADE'
p13
sS'password'
p14
S'VARCHAR(256)'
p15
sS'registration_key'
p16
S'VARCHAR(128)'
p17
sS'id'
p18
S'INT IDENTITY PRIMARY KEY'
p19
s.


On Wed, Jan 30, 2013 at 3:06 PM, Massimo Di Pierro <
massimo.dipie...@gmail.com> wrote:

> Can you send me your .table file for auth_user. Before the migration.
>
>
> On Wednesday, 30 January 2013 07:17:11 UTC-6, Andrew Buchan wrote:
>>
>> Hello,
>>
>> I'm running web2py on a Windows server with MS SQL, it's running from
>> source, as a service.
>> I tried upgrading from version 1.93.2 to the latest stable (2.3.2), and
>> on launching database administration, I got an IntegrityError.
>>
>> ----- Here's the table definition:
>>
>> UserTableName = auth.settings.table_user_name
>>
>> auth_table = db.define_table(
>>     UserTableName,
>>     Field('first_name', length=128, requires = IS_NOT_EMPTY()),
>>     Field('last_name', length=128, requires = IS_NOT_EMPTY()),
>>     Field('email', length=128, unique=True, requires = [IS_EMAIL(),
>> IS_NOT_EMPTY()]),
>>     Field('password', 'password', length=256, readable=False,
>> label='Password'),
>>     Field('department', db.department),
>>     Field('is_department_manager', 'boolean', default = False),
>>     Field('registration_key', length=128, default= '', writable=False,
>> readable=False),
>>     Field('reset_password_key', length=512, writable=False,
>> readable=False, default=''),
>>     format = '%(first_name)s %(last_name)s'
>>     )
>> auth_table.password.requires = [CRYPT()]
>>
>> ------ Here's the traceback:
>>
>>   File "C:\Program Files\Hub Pages\web2py\gluon\restricted.**py", line
>> 212, in restricted
>>     exec ccode in environment
>>   File "C:/Program Files/Hub 
>> Pages/web2py/applications/**HubFormsTidy/models/0_db.py",
>> line 59, in <module>
>>     format = '%(first_name)s %(last_name)s'
>>   File "C:\Program Files\Hub Pages\web2py\gluon\dal.py", line 7186, in
>> define_table
>>     table = self.lazy_define_table(**tablename,*fields,**args)
>>   File "C:\Program Files\Hub Pages\web2py\gluon\dal.py", line 7222, in
>> lazy_define_table
>>     polymodel=polymodel)
>>   File "C:\Program Files\Hub Pages\web2py\gluon\dal.py", line 963, in
>> create_table
>>     fake_migrate=fake_migrate)
>>   File "C:\Program Files\Hub Pages\web2py\gluon\dal.py", line 1069, in
>> migrate_table
>>     self.execute(sub_query)
>>   File "C:\Program Files\Hub Pages\web2py\gluon\dal.py", line 1709, in
>> execute
>>     return self.log_execute(*a, **b)
>>   File "C:\Program Files\Hub Pages\web2py\gluon\dal.py", line 1703, in
>> log_execute
>>     ret = self.cursor.execute(*a, **b)
>> IntegrityError: ('23000', "[23000] [Microsoft][ODBC SQL Server
>> Driver][SQL Server]The CREATE UNIQUE INDEX statement terminated because a
>> duplicate key was found for the object name 'dbo.auth_user' and the index
>> name 'UQ__auth_user__3335971A'. The duplicate key value is (<NULL>). (1505)
>> (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL
>> Server]Could not create constraint. See previous errors. (1750); [01000]
>> [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been
>> terminated. (3621)")
>>
>> ------- Here's the last bit of sql.log in web2py's databases directory (I
>> added blank lines for clarity):
>>
>> timestamp: 2013-01-29T17:21:14.585000
>> ALTER TABLE auth_user ADD password__tmp VARCHAR(256) NULL;
>> UPDATE auth_user SET password__tmp=password;
>> ALTER TABLE auth_user DROP COLUMN password;
>> ALTER TABLE auth_user ADD password VARCHAR(256) NULL;
>> UPDATE auth_user SET password=password__tmp;
>> ALTER TABLE auth_user DROP COLUMN password__tmp;
>>
>> timestamp: 2013-01-29T17:21:14.585000
>> ALTER TABLE auth_user ADD registration_key__tmp VARCHAR(128) NULL;
>> UPDATE auth_user SET registration_key__tmp=**registration_key;
>> ALTER TABLE auth_user DROP COLUMN registration_key;
>> ALTER TABLE auth_user ADD registration_key VARCHAR(128) NULL;
>> UPDATE auth_user SET registration_key=registration_**key__tmp;
>> ALTER TABLE auth_user DROP COLUMN registration_key__tmp;
>>
>> timestamp: 2013-01-29T17:21:14.585000
>> ALTER TABLE auth_user ADD email__tmp VARCHAR(128) NULL UNIQUE;
>>
>> (it stops here)
>>
>> ---------------
>>
>> It seems that the newer version of web2py deemed there were some
>> differences between how the table is defined in the web2py model file and
>> how it is in the database, tried to alter the database, but failed.
>>
>> There were no changes to the database, I just did an upgrade is all, so I
>> don't see the need for it to have tried a migrate on that table, but
>> regardless of that there is an issue.
>>
>> I'm not a SQL expert, but am I right in thinking that what is happening
>> is that web2py is trying to create column 'email__tmp' which allows NULLS,
>> yet has a unique constraint, which Ms SQL won't allow as some of the values
>> will be NULL seeing as there are existing records in the table? Also, it
>> seems to be creating all the tables as allowing NULLS, even though in the
>> model I specify "requires = IS_NOT_EMPTY()" on these columns. If it is
>> necessary to allow NULLS to enable copying of values, then I would expect
>> to see the columns retrospectively altered to not allow NULLS, and only at
>> that point should we add any UNIQUE constraints...
>>
>> Did the DAL migrate functionality change significantly between version
>> 1.93.2 and 2.3.2?
>> Can anyone advise?
>>
>> many thanks,
>>
>> Andrew.
>>
>>  --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to