Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

generics model support #2003

Open
wants to merge 2 commits into
base: v10
Choose a base branch
from
Open

generics model support #2003

wants to merge 2 commits into from

Conversation

cubatic45
Copy link

generics model support

@elliotcourant elliotcourant self-requested a review April 29, 2024 14:02
Comment on lines +98 to +105
name := t.Type.Name()
index := strings.Index(name, "[")
if index > 0 {
name = name[:index]
}
t.zeroStruct = reflect.New(t.Type).Elem()
t.TypeName = internal.ToExported(t.Type.Name())
t.ModelName = internal.Underscore(t.Type.Name())
t.TypeName = internal.ToExported(name)
t.ModelName = internal.Underscore(name)
Copy link
Collaborator

@elliotcourant elliotcourant Jul 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't an easier way to do this be to just define the name directly on the thing?

Like this:

type File struct {
	tableName string `pg:"files"`

	...

This way even if its a generic, the table name stays the same? With how you have it written, you're throwing out the generic argument entirely, so it would never be considered for the table name.

Copy link
Author

@cubatic45 cubatic45 Jul 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Directly defining the name works in some models without nested structure, but in some cases, it does not work.

Sometimes, we forget to use an alias.
example: https://go.dev/play/p/VJpB_c3cLkt

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh interesting, that is definitely a bug in my eyes then, the way table names are built should be consistent. Let me mess around a bit here.

Thank you very much for the code reproduction!

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see now what is happening, the way we generate the alias is different than how we derive the actual table name. Thus why it is only affecting select queries oddly.

I think there is a more elegant solution to this, but let me mess around some more.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have you found a better solution?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants